Límite de tamaño de respuesta del navegador
Pregunta
Llamo a mi servicio web de dominio cruzado a través de una llamada getJson () desde jQuery. Como el tamaño de mi objeto de respuesta es bastante grande, he usado el tamaño máximo de JSon para mi servicio web. He comprobado que getJson () está dando el objeto de respuesta adecuada. Pero aún así no se llama a mi función de devolución de llamada. Firebug dice que se ha excedido su tamaño de respuesta (firefox).
¿Alguien puede decirme cuál es el límite máximo de tamaño de respuesta del navegador que maneja el navegador estándar, por ejemplo (firefox, ie) y cómo abordar el problema?
Aquí está el fragmento de código para el mismo.
//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.
}
cualquier ayuda será muy apreciada.
Gracias Subrat.
Solución
He pasado por esto una vez en un proyecto, y lo que recuerdo es que IE tiene un límite de 2083 caracteres para solicitudes POST y GET. FF tiene un límite mayor, pero no ilimitado.
Otros consejos
Una cosa que parece un poco extraña es la función de devolución de llamada:
$.getJSON(url, function(arg) {
var evalstr = callback + "(" + JSON.stringify(arg) + ");";
eval(evalstr);
});
Dado que está utilizando JSONP (debido a que la solicitud es de dominio cruzado), el servicio de respuesta debe devolver un JavaScript como:
jQueryGeneratedUniqueCallbackName12345({my: 'data', foo: 'bar'});
Entonces, el argumento arg es el objeto JavaScript real. No debería necesitar stringificar y luego evaluarlo. Simplemente úselo como está, es decir:
$.getJSON(url, function(data) {
console.log(data.foo);
});
Hace bastante tiempo publiqué sobre el funcionamiento interno de JSONP en mi blog si está interesado en obtener más detalles.
Quizás desee que su parte $ .getJSON
tenga el siguiente aspecto:
$.getJSON(url, function(arg) {
callback.apply(null, JSON.stringify(arg));
});
// Or more simply
$.getJSON(url, function(arg) {
callback(JSON.stringify(arg));
});
Más información sobre apply
: MDN Documentos
ACTUALIZACIÓN: Antes de eso, también podría cambiar la función getResponse
a:
function getResponse() {
var localService = new getServiceProxy("SearchData.asmx");
localService.invoke('Search', '', successcall);
}