ajax GET завершается ошибкой, когда содержимое JSON превышает 1 МБ на хосте GoDaddy - PullRequest
0 голосов
/ 30 сентября 2018

У меня очень простой запрос ajax GET в jquery, который прекрасно работает на моем локальном тестовом сервере.Если я перенесу веб-страницу на хост-сервер (GoDaddy) вместе со службой php, произойдет сбой с textStatus = "error" и errorThrown = "".Chrome отображает

net :: ERR_EMPTY_RESPONSE.

Все это происходит в течение 1 секунды, так что это не проблема тайм-аута.

Если я усекаю количество записей, чтобы возвращаемый json был меньше 1 МБ, он работает нормально.

Если я вызову код сервера с веб-страницы GoDaddy на свой локальный сервер для всех записей (1,8 МБ), то все тоже в порядке.Хороший возврат с любого сайта завершится менее чем за секунду.

Что может быть причиной того, что GoDaddy в основном не возвращает данных, если в эхо-файле json содержится более 1 МБ данных?

Подпрограмма сервера 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 голосов
/ 01 октября 2018

Ну, я наткнулся на решение.Он должен был добавить оператор заголовка непосредственно перед эхо-сигналом, который, по-видимому, позволяет эхо-файлу быть больше 1 МБ.

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

Теперь мне нужно понять это подробнее и проверить его в различных браузерах.Также интересно, что данные теперь возвращались как объект, поэтому нет необходимости выполнять декодирование с помощью json.

Я подозреваю, что в сервисе GoDaddy есть что-то, что по умолчанию указало длину, но я не уверен.Опять мой сервер так себя не вел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...