Limite de taille de réponse du navigateur
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.
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.
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);
}