我在 jquery 中有一个非常简单的 ajax GET 请求,它在我的本地测试服务器上运行得很好。如果我将网页与 php 服务一起移动到托管服务器 (GoDaddy),则会失败,并显示 textStatus = "error"
和 errorThrown = ""
。 Chrome 显示
net::ERR_EMPTY_RESPONSE.
这一切都在 1 秒内发生,因此不是超时问题。
如果我截断记录数,使返回的 json 小于 1MB,则可以正常工作。
如果我从 GoDaddy 网页调用服务器代码到我的本地服务器以获取所有记录 (1.8MB),一切都很好。任一站点的良好返回都将在不到一秒的时间内完成。
当 json echo 中的数据超过 1MB 时,是什么导致 GoDaddy 基本上不返回任何数据?
PHP 服务器例程:
if (isset($_REQUEST['_SESSION'])) die("Get lost Dweeb!");
error_reporting(E_ALL | E_STRICT);
header('Access-Control-Allow-Origin: *');
$date_code = $_GET['date_code'];
$region = $_GET['region'];
$chargers = array();
$chg_count = 0;
$ftime = filemtime("chargers.json");
if ($ftime != $date_code) {
$aTeslaChargers = json_decode(file_get_contents("chargers.json"),true);
foreach($aTeslaChargers as $aTeslaCharger) {
if ($aTeslaCharger['region'] == $region) {
$chargers[] = $aTeslaCharger;
$chg_count++;
//if ($chg_count > 1972) break;
}
}
}
$json = json_encode(array(array("date_code" => $ftime), $chargers));
echo $json;
JavaScript 例程:
var url = 'https://www.website.com/get_data.php?date_code=0®ion=north_america';
var jqxhr = $.ajax({
url: url,
type: "GET",
crossDomain: true
})
.done(function(response) {
console.log(new Date());
//var data = $.parseJSON(response);
//console.log(data);
console.log(response.length);
})
.fail(function(jqXHR, textStatus, errorThrown) {
console.log(new Date());
console.log(errorThrown);
});
最佳答案
好吧,我偶然发现了一个解决方案。就是在echo之前添加一个header语句,似乎可以让echo大于1MB。
header("Content-Type: application/json");
echo json_encode(array(array("date_code" => $ftime), $chargers));
我现在需要更多地了解这一点并在各种浏览器中检查它。同样有趣的是,数据现在作为对象返回,因此无需对其进行 json 解码。
我怀疑 GoDaddy 服务中存在默认长度的内容,但我不确定。我的服务器再次没有这样做。
关于php - 当 GoDaddy 主机上的 JSON 内容超过 1MB 时,ajax GET 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52572923/