Question

J'appelle mon service Web interdomaine via un appel getJson () de jQuery. Comme la taille de mon objet de réponse est assez grande, j'ai utilisé la taille maximale de JSon pour mon service Web. J'ai vérifié que getJson () donne l'objet de réponse approprié. Mais toujours ma fonction de rappel n'est pas appelée. Firebug dit que sa taille de réponse (firefox) est dépassée.

Quelqu'un peut-il me dire quelle est la taille maximale de réponse du navigateur que le navigateur standard, par exemple (Firefox, par exemple), gère et comment traiter le problème?

Voici l'extrait de code correspondant.

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

toute aide sera très appréciée.

Merci Subrat.

Était-ce utile?

La solution

Je suis passé par là une fois dans un projet et je me souviens que IE a une limite de 2083 caractères pour les requêtes POST et GET. FF a une limite plus large, mais pas illimitée.

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

Autres conseils

Une chose qui a l’air bizarre est la fonction de rappel:

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

Puisque vous utilisez JSONP (étant donné que la requête est interdomaine), le service qui répond devrait renvoyer un code JavaScript du type:

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

Ainsi, l'argument arg est l'objet JavaScript réel. Vous ne devriez pas avoir besoin de stringifier puis de l'évaluer. Utilisez-le simplement tel qu'il est, c'est-à-dire:

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

Il y a assez longtemps, j'ai publié un article sur le fonctionnement interne de JSONP sur mon blog si vous souhaitez plus de détails.

Vous voulez peut-être que votre partie $. getJSON se présente comme suit:

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

// Or more simply

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

Quelques informations supplémentaires sur apply : MDN Docs

UPDATE: auparavant, vous pouviez également remplacer la fonction getResponse par:

.
function getResponse() {
    var localService = new getServiceProxy("SearchData.asmx");
    localService.invoke('Search', '', successcall);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top