2012-03-13 43 views
3

我一直在做很多關於ajax的研究,但是我似乎找不到很多有關用codeigniter創建單獨的ajax層的信息......我在目錄樹中看過ajax控制器,他們正在執行教程視頻在codeigniter上,從來沒有得到真正的解釋。我假設它促進封裝,並只顯示給啓用JavaScript的用戶,這樣,只是不知道如何去執行它在控制器中用於我自己的項目。CodeIgniter Ajax層

回答

5

這一切都取決於你在做什麼。在我看來,最簡單的方法不是分開設置AJAX控制器和URL,而是在控制器中檢測請求並輸出與通常不同的內容。該Input class具有這樣的功能:

/** 
* Is ajax Request? 
* 
* Test to see if a request contains the HTTP_X_REQUESTED_WITH header 
* 
* @return boolean 
*/ 
public function is_ajax_request() 
{ 
    return ($this->server('HTTP_X_REQUESTED_WITH') === 'XMLHttpRequest'); 
} 

我更喜歡使用一個常數:在一個控制器方法

/** 
* Is this an ajax request? 
* 
* @return  bool 
*/ 
define('AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest'); 

用法示例:

$data = $this->some_model->get(); 
if ($this->input->is_ajax_request()) 
{ 
    // AJAX request stops here 
    exit(json_encode($data)); 
} 
$this->load->view('my_view', $data); 

這樣一來,你不通過幾個不同的控制器分佈相同或相似的應用程序邏輯,並且您的代碼可以更容易維護。例如,您的標準HTML表單可以通過AJAX發佈到同一位置,並具有不同的輸出,因此它還有助於使progressive enhancement更簡單,更清晰。另外,您不需要「隱藏」用戶的「僅AJAX」URL。

0

我會嘗試提供一個我以前使用過的簡單解決方案。然而,我對CodeIgniter的熟練程度和熟悉程度並不確定,這也是我自己開發的用於解決CodeIgniter中問題的「自制」解決方案。

我喜歡CodeIgniter,因爲它的簡單性和小腳印。但是我沒有使用它的某些特性:我不使用提供的數據庫連接系統,因爲我有點控制怪物,SQL注入非常普遍。所以我已經學會了如何在這個框架內偏離這個原因。

爲了創建一個單獨的「層」,其中包含AJAX處理,並保持它在實現中的乾淨整潔,我只是做一個單獨的控制器對象誰是特定的工作是響應AJAX請求。這樣您的「網頁」控制器就與「Ajax」控制器分開。

class Ajax extends CI_Controller 
{ 
    function __construct(){ parent::__construct();} 
    function webserv(){ /* Your Web Service code here... */} 
} 

那麼你會引導你的AJAX請求到這個網址:

http://www.example.com/ajax/webserv/

+0

因此,*所有*您網站的Ajax功能打包成一個可怕的控制器?似乎隨着應用程序的增長它會變得非常混亂。要麼,要麼你沒有使用AJAX。 – 2012-03-14 00:36:57

+0

@Madmartigan我們再次見面。這取決於應用程序 - 我在某些情況下使用AJAX的具體原因,所以如果我說整個網站7個或更少的AJAX調用,是的,我會將他們組成一個「單片」AJAX控制器,否則,如果我在做一個AJAX豐富的Web應用程序我剛剛建立了一個Ajax控制器的並行系統,它在頁面控制器和ajax控制器之間的比例爲1:1 – hypervisor666 2012-03-14 00:41:54

+0

是的,我認爲我知道名稱/頭像,我何時/何時知道你從? – 2012-03-14 00:51:00