我在jquery中有一个非常简单的ajax GET请求,该请求在我的本地测试服务器上工作得很好。如果将网页和php服务一起移到托管服务器(GoDaddy),它将失败,并显示textStatus = "error"
和errorThrown = ""
。 Chrome显示
net :: ERR_EMPTY_RESPONSE。
这一切都在1秒钟之内发生,所以这不是超时问题。
如果我截断记录数,以便返回的json小于1MB,则工作正常。
如果我从GoDaddy网页将服务器代码调用到本地记录的所有记录(1.8MB),也都可以。任何一个站点的良好回报都将在不到一秒钟的时间内完成。
当json回显中包含超过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);
});
答案 0 :(得分:2)
好吧,我偶然发现了一个解决方案。只是在回显之前添加了一个头声明,这似乎允许回显大于1MB。
header("Content-Type: application/json");
echo json_encode(array(array("date_code" => $ftime), $chargers));
我现在需要进一步了解这一点,并在各种浏览器中进行检查。同样有趣的是,数据现在作为对象返回了,因此无需对其进行json解码。
我怀疑GoDaddy服务中有某些内容默认了长度,但我不确定。同样,我的服务器没有这种行为。