Ограничение размера ответа браузера - PullRequest
1 голос
/ 29 ноября 2009

Я звоню в свой междоменный веб-сервис через вызов getJson () из jQuery. Поскольку размер моего объекта ответа довольно большой, я использовал максимальный размер JSon для своего веб-сервиса. Я проверил, getJson () дает правильный объект ответа. Но все равно моя функция обратного вызова не вызывается. Firebug говорит, что его (firefox) размер ответа превышен.

Кто-нибудь может мне сказать, каков максимальный размер ответа браузера, который обрабатывается стандартным браузером, например (firefox, т.е.), и как решить проблему?

Вот фрагмент кода для того же.

 //Wrapper call to the actual getJson call
 function getResponse() {
    var localService = new getServiceProxy("SearchData.asmx");
    localService.invoke("Search", "", "successcall");
 }

 //getJson call
 function getServiceProxy(serviceUrl) {
     var _I = this;
     this.serviceUrl = serviceUrl;

     // *** Call a wrapped object
     this.invoke = function(method, data, callback, error) {

         if (data == "") {
             var url = _I.serviceUrl + "/" + method + "?output=json&callback=?";
         }
         else {
             url = _I.serviceUrl + "/" + method + "?" + data + "&output=json&callback=?";
         }
         $.getJSON(url, function(arg) {       
             var evalstr = callback + "(" + JSON.stringify(arg) + ");";
             eval(evalstr);
         });
     }
 }

 //success callback function
 function successcall(multiSearchResponse) {
     //use the response.
 }

любая помощь будет высоко оценена.

Спасибо, Субрат.

Ответы [ 3 ]

0 голосов
/ 29 ноября 2009

Я однажды проходил через это в проекте, и я вспомнил, что IE имеет ограничение в 2083 символа для запросов POST и GET. FF имеет больший лимит, но не безграничный.

http://support.microsoft.com/kb/208427

0 голосов
/ 16 октября 2011

Может быть, вы хотите, чтобы ваша $.getJSON деталь выглядела следующим образом:

$.getJSON(url, function(arg) {       
    callback.apply(null, JSON.stringify(arg));
});

// Or more simply

$.getJSON(url, function(arg) {       
    callback(JSON.stringify(arg));
});

Дополнительная информация о apply: Документы MDN


ОБНОВЛЕНИЕ: До этого вы также могли изменить функцию getResponse на:

function getResponse() {
    var localService = new getServiceProxy("SearchData.asmx");
    localService.invoke('Search', '', successcall);
}
0 голосов
/ 29 ноября 2009

Одна вещь, которая выглядит несколько странно, это функция обратного вызова:

 $.getJSON(url, function(arg) {       
     var evalstr = callback + "(" + JSON.stringify(arg) + ");";
     eval(evalstr);
 });

Поскольку вы используете JSONP (из-за того, что запрос является междоменным), отвечающая служба должна возвращать JavaScript, например:

jQueryGeneratedUniqueCallbackName12345({my: 'data', foo: 'bar'});

Таким образом, аргумент arg является фактическим объектом JavaScript. Вам не нужно фиксировать и затем оценивать его. Просто используйте его как есть, т.е.

 $.getJSON(url, function(data) {       
     console.log(data.foo);
 });

Некоторое время назад я опубликовал информацию о внутренней работе JSONP в своем блоге, если вас интересует более подробная информация.

...