我在jquery中有一个非常简单的ajax GET请求,在我的本地测试服务器上工作得很好。如果我将网页和php服务一起移到托管服务器(GoDaddy),它将失败并显示textStatus = "error"和errorThrown = ""。Chrome显示器
textStatus = "error"
errorThrown = ""
净:: 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); });
好吧,我偶然发现了一个解决方案。它是在回显之前添加一个头声明,这似乎允许回显大于1MB。
header("Content-Type: application/json"); echo json_encode(array(array("date_code" => $ftime), $chargers));
现在,我需要更多地了解这一点,并在各种浏览器中进行检查。同样有趣的是,数据现在作为对象返回,因此无需对其进行json解码。
我怀疑GoDaddy服务中有某些内容默认了长度,但是我不确定。同样,我的服务器没有这种行为。