【发布时间】:2019-03-17 03:18:28
【问题描述】:
我在 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);
});
【问题讨论】:
-
仅供参考,您无需设置
crossDomain选项。事实上,我从未见过一个好的用例。它实际上仅用于在本地域请求上强制执行 JSONP 请求