2009-11-10 6 views
2

Я посылаю запрос от страницы ASP.NET, а затем ждать ответ, вызывая GetCommand с помощью SetInterval методы:Каков максимальный размер данных ответа ajax?

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 МБ данных ...

Где находится проблема?

+1

Какая ошибка забрасывается? Какой веб-сервер вы используете? –

ответ

1

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

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

} 

function AjaxFinishedGet(xml, status) { 
    loading = false; 
    ... 
    ... 
} 
1

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

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 (я использую новую строку String ('x' , 102330), поэтому это не может быть проблемой какого-либо особого характера или что-то в этом роде).

0

Существует настройка по умолчанию в файле web.config для .NET является 4mb

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

maxRequestLength Поскольку это INT, теоретический максимум максимальное значение INT, который 2147483647

0

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

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