我在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);
});
解决方法:
好吧,我偶然发现了一个解决方案.它是在回声之前添加一个头语句,似乎允许回声大于1MB.
header("Content-Type: application/json");
echo json_encode(array(array("date_code" => $ftime), $chargers));
我现在需要更多地了解这一点并在各种浏览器中进行检查.同样有趣的是,数据现在作为对象返回,因此无需对其进行json解码.
我怀疑GoDaddy服务中有些东西违反了长度,但我不确定.我的服务器再次没有这样做.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。