Navegador limite de tamanho de resposta
Pergunta
Eu estou chamando meu serviço web de domínio cruzado através de uma chamada getJson () do jQuery. Como o meu tamanho objeto de resposta é muito grande, eu usei o tamanho máximo JSon para o meu web-service. Fui verificar getJson () está dando objeto de resposta adequada. Mas ainda assim a minha função de retorno não é chamado. Firebug está dizendo que é (firefox) tamanho da resposta é excedido.
Alguém pode dizer-me o que é o limite de tamanho máximo de resposta navegador que o navegador padrão por exemplo (Firefox, IE) pega e como lidar com o problema?
Aqui está o trecho de código para o mesmo.
//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.
}
qualquer ajuda será muito apreciada.
Graças Subrat.
Solução
Ive sido através desta vez em um projeto, e que me lembro foi que o IE tem um limite de 2083 caracteres para ambos GET e POST solicitações. FF tem um limite maior, mas não ilimitado.
Outras dicas
Uma coisa que parece meio estranho é a função de retorno:
$.getJSON(url, function(arg) {
var evalstr = callback + "(" + JSON.stringify(arg) + ");";
eval(evalstr);
});
Uma vez que você estiver usando JSONP (devido ao pedido sendo cross-domain) o serviço de responder deve retornar um JavaScript como:
jQueryGeneratedUniqueCallbackName12345({my: 'data', foo: 'bar'});
Assim, o arg argumento é o objeto real JavaScript. Você não precisa stringify e depois eval-lo. Simplesmente usá-lo como ele é, ou seja:.
$.getJSON(url, function(data) {
console.log(data.foo);
});
Muito tempo atrás eu postei sobre a funcionamento interno do JSONP no meu blog se você estiver interessado em mais detalhes.
Talvez você quer que seu $.getJSON
parte olhar o seguinte:
$.getJSON(url, function(arg) {
callback.apply(null, JSON.stringify(arg));
});
// Or more simply
$.getJSON(url, function(arg) {
callback(JSON.stringify(arg));
});
Alguns mais informações sobre apply
: MDN Docs
UPDATE: Antes que você também poderia alterar a função getResponse
a:
function getResponse() {
var localService = new getServiceProxy("SearchData.asmx");
localService.invoke('Search', '', successcall);
}