それともブラウザからアドレスを直接叩くなどしてAjaxを通さずにアクセスしてきたのか調べたい時がある。
jQueryやprototypeなどのライブラリを使ってAjax通信をするときは実はヘッダに
「X-Requested-With:XMLHttpRequest」
というデータをつけて送ってくる。
なので、ヘッダ情報に「X-Requested-With」があるかどうかを調べて
それが「XMLHttpRequest」という値になってるかをチェックすればいい。
//link・・・http://mio-koduki.blogspot.com/2012/03/phpjavascript-ajax.html
//返り値・・・Ajaxからの通信であればtrue、そうでなければfalse
function is_ajax()
{
return isset($_SERVER['HTTP_X_REQUESTED_WITH'])&&strtolower($_SERVER['HTTP_X_REQUESTED_WITH'])=='xmlhttprequest';
}
という感じになる。
では、jQueryなどのライブラリを使わずに自力でXMLHttpRequest(IEであればActiveXObject」)を使ってAjaxを行なっている場合はどうすればいいか?
その時は自分でヘッダに「X-Requested-With:XMLHttpRequest」をつけてしまえばいい。
//link・・・http://mio-koduki.blogspot.com/2012/03/phpjavascript-ajax.html
//Ajax通信用のオブジェクト作成関数
function create_ajax_object()
{
//IE以外
if(window.XMLHttpRequest)
{
try
{
return new XMLHttpRequest();
}
catch(e)
{
return null;
}
}
//IE
else if(window.ActiveXObject)
{
try
{
//IE6以降
return new ActiveXObject('Msxml2.XMLHTTP');
}
catch(e)
{
try
{
//IE5
return new ActiveXObject('Microsoft.XMLHTTP');
}
catch(e)
{
return null;
}
}
}
else
{
return null;
}
}
//Ajax通信関数
function ajax_access(method,path,data,callback,async_flag)
{
//パスが設定されていなければnullを返す
if(path==null)
{
return null;
}
//Ajax通信用のオブジェクト作成
var ajax_object=create_ajax_object();
//Ajax通信用のオブジェクト作成に失敗したらnullを返す
if(ajax_object==null)
{
return null;
}
//メソッドに何も設定されていなければGETを設定する
method=method||'GET';
//同期フラグに何も設定されていなければtrueを設定する
async_flag=async_flag||true;
//通信回線を開く
ajax_object.open(method,path,async_flag);
//content-typeを指定する
//これがないとPOSTのデータを飛ばすときなどに失敗することがある
ajax_object.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
//「X-Requested-With:XMLHttpRequest」をヘッダにつける
ajax_object.setRequestHeader('X-Requested-With','XMLHttpRequest');
//通信時のイベント
ajax_object.onreadystatechange=function()
{
//readyStateが4の時通信終了
//statusが200の時通信成功
if(ajax_object.readyState==4&&ajax_object.status==200)
{
//コールバック関数が設定されていれば呼び出す
if(callback!=null)
{
//コールバック関数に結果を返す
callback(ajax_object.responseText);
}
}
}
//データ送信
ajax_object.send(data);
}
//Ajax通信を行う
ajax_access('post','test.php',encodeURIComponent('test')+'='+encodeURIComponent('テスト'),function(data){alert(data);},true);
とこんな感じになる。
久しぶりにJavaScriptでAjax書いた気がする。
ポイントはopenメソッドを呼び出した後に
setRequestHeaderを呼び出して「X-Requested-With:XMLHttpRequest」をヘッダにつけるところ
0 件のコメント:
コメントを投稿