小编典典

GoDaddy主机上的JSON内容超过1MB时ajax GET失败

ajax

我在jquery中有一个非常简单的ajax
GET请求,在我的本地测试服务器上工作得很好。如果我将网页和php服务一起移到托管服务器(GoDaddy),它将失败并显示textStatus = "error"errorThrown = ""。Chrome显示器

净:: 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&region=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);
    });

阅读 298

收藏
2020-07-26

共1个答案

小编典典

好吧,我偶然发现了一个解决方案。它是在回显之前添加一个头声明,这似乎允许回显大于1MB。

header("Content-Type: application/json");
echo json_encode(array(array("date_code" => $ftime), $chargers));

现在,我需要更多地了解这一点,并在各种浏览器中进行检查。同样有趣的是,数据现在作为对象返回,因此无需对其进行json解码。

我怀疑GoDaddy服务中有某些内容默认了长度,但是我不确定。同样,我的服务器没有这种行为。

2020-07-26