Browser Antwort Größenbegrenzung
Frage
Ich meinen Cross-Domain-Web-Service durch einen getJSON () Aufruf von jQuery Aufruf. Da meine Antwort Objektgröße ziemlich groß ist, habe ich die maximale JSon Größe für meinen Web-Service verwendet. Ich habe überprüft getJSON () schenkt richtige Antwortobjekt. Aber noch ist meine Callback-Funktion nicht aufgerufen. Firebug sagt, dass es (firefox) Antwortgröße überschritten wird.
Kann mir jemand sagen, was ist die maximale Browser Antwort Größenbegrenzung, die der Standard-Browser beispiels (Firefox, IE) sie behandelt und wie man mit dem Problem fertig zu werden?
Hier ist das Code-Snippet für das gleiche.
//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.
}
wird jede Hilfe sehr geschätzt werden.
Danke Subrat.
Lösung
Ive in einem Projekt durch diesen ein Mal gewesen, und was mich daran erinnern, dass der IE eine Grenze von 2083 Zeichen für beide POST hat und GET-Anfragen. FF hat eine größere Grenze, aber nicht unbegrenzt.
Andere Tipps
Eine Sache, die irgendwie seltsam aussieht, ist die Callback-Funktion:
$.getJSON(url, function(arg) {
var evalstr = callback + "(" + JSON.stringify(arg) + ");";
eval(evalstr);
});
Da Sie JSONP verwenden (aufgrund der Anfrage sein Cross-Domain) der antwortenden Dienst zurückkehren sollte ein JavaScript wie:
jQueryGeneratedUniqueCallbackName12345({my: 'data', foo: 'bar'});
So ist die arg Argument ist das eigentliche Objekt JavaScript. Sie sollten nicht stringify müssen und es dann eval. verwenden Sie es einfach wie es ist, das heißt:.
$.getJSON(url, function(data) {
console.log(data.foo);
});
Eine ganze Weile her, ich gepostet über die Innenleben von JSONP auf meinem Blog, wenn Sie in mehr Details interessiert sind.
Vielleicht möchten Sie Ihren $.getJSON
Teil wie folgt aussehen:
$.getJSON(url, function(arg) {
callback.apply(null, JSON.stringify(arg));
});
// Or more simply
$.getJSON(url, function(arg) {
callback(JSON.stringify(arg));
});
Einige weitere Informationen über apply
: MDN Docs
UPDATE: Vor, dass Sie auch die getResponse
Funktion ändern könnte:
function getResponse() {
var localService = new getServiceProxy("SearchData.asmx");
localService.invoke('Search', '', successcall);
}