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.

¿Fue útil?

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.

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

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);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top