jQueryによるAjaxリクエストをサーバ側で検知する
この記事は賞味期限切れです。(更新から1年が経過しています)
jQueryでXmlHttpRequestを介してアクセスされたのかどうかを判別する方法です。
Ajaxで呼ばれた時とそうでない場合で出力を分けたりする時に使えそうですね。
Learning jQuery – Tips, Techniques, Tutorials
簡単な仕組み
ネタ元はこの記事です。
Detecting Ajax Events on the Server » Learning jQuery – Tips, Techniques, Tutorials
どうやらjQueryはXmlHttpRequestでリクエストをする際に
「X-Requested-With」というヘッダに
「xmlHttpRequest」という値を格納しているそうな。
jQuery…なんという愛でしょう。
jQueryの素晴らしさを実感すると同時に、
やはり一度はソースを熟読しておくべきだなぁと感じますね。
参考になる設計手法とか、恐らく随所に見られる事でしょう!
取得してみる
PHPとRubyで、試しに取得してみました。
PHP
$xhr = ( @$_SERVER["HTTP_X_REQUESTED_WITH"] === "XMLHttpRequest" );
echo ($xhr) ? "jQuery Ajax" : "Requested Directly" ;
Ruby
xhr = ( ENV["HTTP_X_REQUESTED_WITH"] === "XMLHttpRequest" )
print (xhr) ? "jQuery Ajax" : "Requested Directly"
ちなみにこのヘッダが渡されるのは、あくまでもXMLHttpRequestを介して行われた通信だけです。
それ以外のもの、例えばJSONP等の場合は渡されないので注意しましょう。
(JSONPはscript要素を追加しているだけなので、XMLHttpRequestは使用していません)
cf) jQueryはJSONPの理解の妨げになるか?
ネタ元のブログも素晴らしいです!
今回初めて知ったのですが、是非とも全てに目を通したいです。
Learning jQuery – Tips, Techniques, Tutorials
コメント