2011-08-04 18 views
5

有沒有辦法區分ajax調用和正常的瀏覽器請求在PHP(或codeigniter是具體的)?如何在php(或codeigniter)中區分ajax調用和瀏覽器請求?

這是我的jquery ajax調用:

$(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

笨的方式..

$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 

但也有可能是已經笨實現這樣的事情,只是HTTP_X_REQUESTED_WITH

+0

它是codeigniter中的$ this-> input-> is_ajax_request()。但它是+1的經驗,看看該方法實際工作。謝謝。 – dqiu

1
​​

全球搜索應該做你需要的。雖然它顯然可以像任何其他HTTP頭一樣僞造,所以不要依賴它來做任何重要的事情。

0

這是Codeigniter對此功能的實現。

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

     } 
0

而不是依賴於它可能會改變如服務器變量。如果服務器位於反向代理之後,我通過一個單獨的JavaScript函數來添加一個POST變量:isajax來完成所有的AJAX調用。然後我使用類似$ this-> UI-> IsAJAX()的方法來檢查它,它查找在設置控制器時初始化的變量。

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

如果你不使用框架,我的答案是有用的,我不建議編寫自己的函數來進行AJAX調用並設置POST變量(當然除了應用程序邏輯)。 – Ravi

相關問題