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

时间:2018-09-29 22:05:22

标签: php json ajax get

我在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&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);
    });

1 个答案:

答案 0 :(得分:2)

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

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

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

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