クライアントでJSONPを使用して、HTTP GETを使用して結果を返すことができるWCFサービスを使用してサーバーからデータを取得します(「関数名」である「callback」パラメーターを取得し、callback({data})を返します)。 .. JSONP)。
すべてが機能しますが、サービスの操作の1つで(「AspNetCacheProfile」を使用して)キャッシュを有効にすると、何かがおかしくなり、何がわかりません...
JSONPを取得する方法は、SO(http://stackoverflow.com/questions/2499567/how-to-make-a-json-call-to- a-url)
function getJSONP(url, success) {
var ud = 'fc_' + + Math.floor(Math.random()*1000000),
script = document.createElement('script'),
head = document.getElementsByTagName('head')[0]
|| document.documentElement;
window[ud] = function(data) {
head.removeChild(script);
success && success(data);
};
script.src = url.replace('callback=?', 'callback=' + ud);
head.appendChild(script);
}
これにより、ランダムID('fc_xxxx')が作成され、ウィンドウオブジェクト内の関数として割り当てられ、ドキュメントに挿入される動的JavaScriptのURLの'callback'パラメーターとして使用され、次に' ud'関数が実行され、スクリプトが削除され、受信したデータを使用して「success」コールバック関数が呼び出されます。
サービスからの通常のキャッシュされていない操作で使用する場合、通常、応答を返すのに約200ミリ秒かかり、問題なく動作します。
キャッシュされた応答には約10ミリ秒かかります。「fc_XXXXX」関数が定義されていないというエラーが表示されます。
まるで応答が「速すぎる」かのようです。
また、 jQuery.getJSON()を使用してみましたが、コールバックがトリガーされません。
すべての場合において、Firebugのネットワークトラフィックを見ると、GETリクエストが表示され、正しいデータが実際に返されることがわかります。
キャッシュされた応答で正しく機能させる方法を誰かが知っていますか...?