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.

War es hilfreich?

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.

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

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);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top