2

jQuery からの getJson() 呼び出しを介してクロス ドメイン Web サービスを呼び出しています。応答オブジェクトのサイズがかなり大きいため、Web サービスに最大の JSON サイズを使用しました。getJson() が適切な応答オブジェクトを提供していることを確認しました。しかし、まだ私のコールバック関数は呼び出されていません。Firebug は、(firefox) の応答サイズを超えていると言っています。

標準ブラウザ(Firefoxなど)が処理する最大ブラウザ応答サイズの制限と、問題の対処方法を誰か教えてもらえますか?

これは同じコードスニペットです。

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

どんな助けでも大歓迎です。

ありがとうサブラット。

4

3 に答える 3

0

奇妙に見えるものの1つは、コールバック関数です。

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

JSONPを使用しているため(リクエストがクロスドメインであるため)、応答するサービスは次のようなJavaScriptを返す必要があります。

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

したがって、arg引数は実際のJavaScriptオブジェクトです。文字列化してから評価する必要はありません。そのまま使用してください。

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

かなり前に、JSONPの内部動作について、詳細に興味がある場合はブログに投稿しました。

于 2009-11-29T08:32:01.463 に答える
0

私はプロジェクトでこれを一度経験しましたが、私が思い出したのは、IE では POST 要求と GET 要求の両方で 2083 文字の制限があるということでした。FF には上限がありますが、無制限ではありません。

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

于 2009-11-29T09:58:40.207 に答える
0

$.getJSONパーツを次のように表示したい場合があります。

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

// Or more simply

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

についての詳細情報apply: MDN Docs


更新:getResponseその前に、関数を次のように変更することもできます。

function getResponse() {
    var localService = new getServiceProxy("SearchData.asmx");
    localService.invoke('Search', '', successcall);
}
于 2011-10-16T10:26:54.247 に答える