Domanda

Sto chiamando il mio servizio web interdominio tramite una chiamata getJson () da jQuery. Poiché la dimensione dell'oggetto della mia risposta è piuttosto grande, ho usato la dimensione massima di JSon per il mio servizio web. Ho verificato che getJson () stia dando l'oggetto di risposta corretto. Ma la mia funzione di callback non viene ancora chiamata. Firebug sta dicendo che la sua dimensione di risposta (firefox) è stata superata.

Qualcuno può dirmi qual è il limite massimo di dimensione della risposta del browser che il browser standard, ad esempio (Firefox, cioè) gestisce e come affrontare il problema?

Ecco lo snippet di codice per lo stesso.

 //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.
 }

qualsiasi aiuto sarà molto apprezzato.

Grazie Subrat.

È stato utile?

Soluzione

L'ho passato una volta in un progetto e ciò che ricordo è che IE ha un limite di 2083 caratteri sia per le richieste POST che GET. FF ha un limite maggiore, ma non illimitato.

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

Altri suggerimenti

Una cosa che sembra strana è la funzione di callback:

 $.getJSON(url, function(arg) {       
     var evalstr = callback + "(" + JSON.stringify(arg) + ");";
     eval(evalstr);
 });

Poiché stai utilizzando JSONP (a causa della richiesta tra domini), il servizio di risposta dovrebbe restituire un JavaScript come:

jQueryGeneratedUniqueCallbackName12345({my: 'data', foo: 'bar'});

Quindi l'argomento arg è l'oggetto JavaScript effettivo. Non dovresti aver bisogno di stringere e poi valutarlo. Usalo semplicemente così com'è, cioè:

 $.getJSON(url, function(data) {       
     console.log(data.foo);
 });

Molto tempo fa ho postato sul meccanismi interni di JSONP sul mio blog se sei interessato a maggiori dettagli.

Forse vuoi che la tua parte $ .getJSON abbia il seguente aspetto:

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

// Or more simply

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

Altre informazioni su si applicano : MDN Documenti


AGGIORNAMENTO: prima puoi anche cambiare la funzione getResponse in:

function getResponse() {
    var localService = new getServiceProxy("SearchData.asmx");
    localService.invoke('Search', '', successcall);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top