Ограничение размера ответа браузера
Вопрос
Я вызываю свой междоменный веб-сервис с помощью вызова 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 имеет больший лимит, но не безграничный.
Другие советы
Одна вещь, которая выглядит немного странно, это функция обратного вызова:
$.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);
}