2011-08-04 2 views
5

php(またはcodeigniterに固有のもの)でajax呼び出しと通常のブラウザ要求を区別する方法はありますか?php(またはcodeigniter)でajax呼び出しとブラウザ要求を区別する方法は?

これは私のjqueryのAJAX呼び出しです:これはCodeIgniterの中に顧客のコントローラのインデックスメソッドである

$(document).ready(function() { 
    $('#container').load('http://localhost/index.php/customer/'); 
}); 

public function index() { 
    //if (call == 'ajax request') 
    // do this if it's an ajax request; 
    //else 
    // do that if user directly type the link in the address bar; 
    $this->load->view('customer/listview'); 
} 

任意の助けをいただければ幸いです。ありがとう。

答えて

5

CodeIgniterの道..

$this->input->is_ajax_request() 
+0

うわー、それは動作します。入力クラスを完全には読まなかったと思います。どうもありがとうございます。 – dqiu

3
function getIsAjaxRequest() 
{ 
    return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH']==='XMLHttpRequest'; 
} 

このようにそれを使用し、どこか、その後の進路にこの関数を定義する:

if (getIsAjaxRequest()) 
// do this 
else 
// do that 

しかし、CodeIgniterの中で、すでにそのようなことがあるかもしれませんが、HTTP_X_REQUESTED_WITH

+0

codeigniterの$ this-> input-> is_ajax_request()です。メソッドが実際にどのように機能するかは、+1の経験です。ありがとう。 – dqiu

1
​​

万一のためだけのグローバル検索を実装しましたあなたが必要とするものをしなさい。明らかに他のHTTPヘッダーと同じように偽装される可能性がありますが、メジャーなものには頼らないでください。

0

これは、この機能のCodeigniterの実装です。

if($this->input->isAjax()) { 

     } 
0

代わりの例を変更してしまうかもしれませんサーバー変数に依存します。サーバーがリバースプロキシの背後にある場合、POST変数を追加する単一のjavascript関数を使用して、すべてのAJAX呼び出しを行います。isajax。次に、$ this-> UI-> IsAJAX()のようなものを使ってチェックします。これは、コントローラの設定中に初期化された変数を探します。

$this->_isAJAX = (empty($_POST['isajax']) ? true : false. 
+0

私の答えは、フレームワークを使用していない場合に便利ですが、AJAX呼び出しを行い、POST変数を設定するための独自の関数を書くことはお勧めできません。 – Ravi

関連する問題