Каков максимальный размер данных ответа ajax? - PullRequest
2 голосов
/ 10 ноября 2009

Я отправляю запрос со страницы asp.net и затем жду ответа, вызывая GetCommand с помощью метода SetInterval:

    function GetCommand(id, sid) {
    getCommandResponse = $.ajax({
        type: "POST",
        async: true,
        url: "../WebServices/TSMConsole.asmx/GetCommand",
        data: "{'param' : '" + id + "', 'sid' : '" + sid + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(result, status) {
            AjaxFinishedGet(result, status);
            getCommandResponse = null;
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            AjaxFailedGet(XMLHttpRequest, textStatus, errorThrown);
            getCommandResponse = null;
        }
    });
}

В AjaxFinishedGet (результат, статус) я пытаюсь извлечь мои данные:

    function AjaxFinishedGet(xml, status) {
    endDate = new Date();
    if (xml.d.IsPending == 'false' || endDate - startDate > timeoutMSec) {
        if (getCommand != null) {
            window.clearInterval(getCommand);
            getCommand = null;
            WriteGetCommand(xml.d.Text);
            $("#showajax").fadeOut("fast");
        }
    }
}

Однако, если размер текста превышает 102330 байт - вместо AjaxFinishedGet вызывается AjaxFailedGet: (

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

Где проблема?

Ответы [ 4 ]

1 голос
/ 11 ноября 2009

Джеймс Блэк, у меня нет никакой информации об ошибке:

function AjaxFailedGet(XMLHttpRequest, textStatus, errorThrown) {
    $("#<%= tbResponse.ClientID %>").text(errorThrown);
    if (getCommand != null) {
        window.clearInterval(getCommand);
        $("#showajax").fadeOut("fast");
    }
}
  • errorThrown пуст.

WebServer - это IIS7 в Vista x32

zazk, спасибо, поставив такую ​​проверку, это хороший момент, и я буду использовать этот флаг для надежности. Однако, в данном случае, я не думаю, что это может быть причиной проблемы: вывод ответа работает всегда, когда размер данных равен 102330 и не работает, начиная с 102331 (я использую новую строку ('x') , 102330), поэтому это не может быть проблемой с каким-либо особым символом или чем-то подобным).

1 голос
/ 10 ноября 2009

Ну, множественные запросы могут вызвать ошибку, возможно, хорошим решением будет убедиться, что нет активного текущего запроса.

var loading = false;
function GetCommand(id, sid) {
    if (loading) {return false;}
    loading =  true;
        getCommandResponse = $.ajax({
         ....
         ....
        });

}

function AjaxFinishedGet(xml, status) {
    loading = false;
    ...
    ...
}
0 голосов
/ 18 июня 2013

У меня просто была неприятная ошибка, которую я отследил до длины строки, возвращаемой из вызова AJAX. Это было около 63639 (iirc), что близко к пределу ushort (опять же, iirc!) (Я полагаю, iis добавляет свой собственный материал, чтобы составить остальную часть ограничения персонажа).

Мне удалось убрать весь стиль из html в строке и добавить его через JQuery, когда он был получен клиентом! :)

0 голосов
/ 08 ноября 2012

В файле web.config есть настройка по умолчанию для .NET: 4 МБ

<system.web>
<httpRuntime maxRequestLength="4096" />
</system.web>

Поскольку maxRequestLength является INT, теоретический максимум - это значение INT max, которое составляет 2 147 483 647

...