2012-03-31 9 views

答えて

5

そうではありません。

あなたは、あなたが使用できるリクエストヘッダーに何らかの種類の識別子を残すようにJavaScriptを書くことができます。 XHR setRequestHeaderメソッドを参照してください。

HTTPの便利な使い方は、Acceptヘッダーを変更して、通常のコンテンツネゴシエーションを行うことです。次に、Ajaxであるかどうかを気にする代わりに(例えば)、JSON応答よりもHTML応答が優先されるかどうかを気にします。

もう1つの規則は、XMLHttpRequestの値を持つ標準外のX-Requested-Withヘッダーを使用することです。多くのJavaScriptライブラリは、XHRを使用して任意のリクエストにデフォルトでこれを追加します。

いずれの手法も、XMLHttpRequestまたはプラグインベースのAjaxでしか動作しません。 JSON-PまたはiframeベースのAjaxに任意のHTTPヘッダーを設定することはできません。

+0

ありがとうございました。したがって、JavaScriptを使用して 'X-Requested-With'ヘッダーをすべてのブラウザで信頼できるものにしますか?または、次のような追加のGETパラメータを使用します:my_page.php?request_method = ajaxはより信頼できますか? – Mark

+0

'setRequestHeader'で新しいヘッダーを追加することは十分サポートされています。 – Quentin

0

サーバーに関する限り、通常のリクエストとJavascriptによって開始されたリクエストとの間に特別な違いはありません。

特定のブランドのブランドを特定する場合は、カスタムヘッダーを渡すのが妥当な方法です。

$.ajax(uri, { 
    beforeSend: function(xhr) { 
    xhr.setRequestHeader('X-YourApp-AJAX', '1'); 
}); 

Apacheを使用している場合、PHPで設定したヘッダーを確認するだけで十分です。

$headers = getallheaders(); 

if(isset($headers['X-YourApp-AJAX'])) { 
    // AJAX request 
} else { 
    // ... 
} 

編集

jQueryのように見える、とりわけ、既にAJAXリクエストにX-Requested-Withヘッダを渡す - 優先してそれを使用します。

+0

これはかなり良い解決策のようです。 xhr.setRequestHeader( 'X-YourApp-AJAX'、 '1')も同様です。すべてのブラウザで動作しますか? – Mark

+0

基本的な '' XMLHttpRequest''オブジェクトは、最新のすべてのブラウザに実装されています。 IE6はそれを[その名前で]サポートしていません(http://msdn.microsoft.com/en-us/library/ms537505(v = vs.85).aspx)。しかし、あなたのJavascriptフレームワークはあなたを救うでしょう存在しない場合は手動で定義する必要があります。 – cantlin

関連する問題