Вопрос

Я вызываю свой междоменный веб-сервис с помощью вызова 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.
 }

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

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

Это было полезно?

Решение

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

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

Другие советы

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

 $.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 в моем блоге, если вы заинтересованы в более подробной информации.

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

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

// Or more simply

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

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

<Ч>

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

function getResponse() {
    var localService = new getServiceProxy("SearchData.asmx");
    localService.invoke('Search', '', successcall);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top