質問

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

ご協力いただければ幸いです。

Subratに感謝します。

役に立ちましたか?

解決

プロジェクトでこれを1回行ったことがありますが、覚えているのは、IEにはPOST要求とGET要求の両方で2083文字の制限があるということです。 FFにはより大きな制限がありますが、無限ではありません。

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

他のヒント

奇妙に見えるものの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の内部動作をご覧ください。

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

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

// Or more simply

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

apply に関する詳細情報: MDNドキュメント


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

function getResponse() {
    var localService = new getServiceProxy("SearchData.asmx");
    localService.invoke('Search', '', successcall);
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top