質問

問題は、ブラウザが単純な呼び出しを実装する方法の違いにあります。この問題は、カラーボックス拡張機能 (フェイスボックス バリアント) の使用中に発生します。コンテンツは 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を呼び出すので、これは役立ちます。したがって、我々は、インターセプト$.loadsは$.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/");
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top