質問
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にはより大きな制限がありますが、無限ではありません。
他のヒント
奇妙に見えるものの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);
}