jQuery .load 関数による Ajax 呼び出し
-
25-09-2019 - |
質問
問題は、ブラウザが単純な呼び出しを実装する方法の違いにあります。この問題は、カラーボックス拡張機能 (フェイスボックス バリアント) の使用中に発生します。コンテンツは jquery load() 関数を使用してカラーボックスにロードされます。
Chrome によって呼び出しが行われると、Accept ヘッダーは次のように設定されます。
Accept: text/html, */*, text/javascript
FireFoxの場合、ヘッダーは次のようになります。
Accept: text/javascript
次のように設定して Accept ヘッダーを強制しようとしました。
jQuery.ajaxSetup({
'beforeSend': function (xhr) {xhr.setRequestHeader("Accept", "text/javascript")}
});
$.ajax 呼び出しを使用している間は正常に動作しますが、.load 関数には影響しないようです。この問題を解決する方法はありますか?
解決
それが直接$.ajax
呼び出しを使用して問題を回避するために、より良いは明らかだとしても、あなたは$.ajax
メソッド用のプロキシメソッドを作成することができます。順番に$.load
は、デフォルトパラメータのセットで$.ajax
を呼び出すので、これは役立ちます。したがって、我々は、インターセプト$.load
sは$.ajax
に呼び出すことができます。
var org = $.ajax;
$.ajax = function(settings){
settings['accepts'] = null;
settings['beforeSend'] = function(xhr) {
xhr.setRequestHeader("Accept", "text/javascript");
}
org(settings);
}
$("#foo").load("http://fiddle.jshell.net/FpCBJ/show/light/");
てみの
あなたが設定して直接呼び出すときrequestheaderを設定しないようにするために、プロキシで確認することができ、プロキシメソッドに別のパラメータを追加したい場合がありますので、は明らかに、これは、$.ajax
に対するすべての呼び出しに影響します。か、設定でさえも。
私はあなたにも追加/各呼び出しのためのプロキシを削除することができると思いますが、これは、オーバーヘッド追加し、競合状態につながる可能性がある(?)(あなたが要求した後、プロキシストレートを削除する場合でしょうが、そうは思わない、待っていません)コールバックのために、あなたはいくつかの種類のロックを必要があると思いますので。
EDIT:settings['accepts'] = null;
のみ追加として追加$.ajax
はない置き換え、コールバックの前に任意のヘッダを追加することからsetRequestHeader()
を維持します。ボーイこれは汚いです。
EDIT 2:実際には、おそらくクリーナーのオプションは、あなた自身を設定するために受け入れることと$.ajax
は全て自身でXHRアップデータ型とセットをマッピングするためにその仕事をできるようにするためにそれらを参照することになります:
var org = $.ajax;
$.ajax = function(settings){
settings['accepts'] = {"myDataType" : "text/javascript"};
settings['dataType'] = "myDataType";
org(settings);
}
$("#foo").load("http://fiddle.jshell.net/FpCBJ/show/light/");