Codeigniter 如何處理普通請求和ajax請求

來源:互聯網
上載者:User
在Codeigniter中,所有的請求一般都對應於一個Controller中的函數,如果對於不同的請求,如ajax和普通請求,返回的東西一般都會不一樣如this->load->view 或者直接echo。

兩種方法寫在一起讓我感覺特別不爽,我設想了一種方案就是使用Http頭中的Accept,如何產生一種方式,就是在一個函數中,不同的請求輸出不同的view樣式,比如ajax請求這個函數,就返回json格式,普通請求,就返回HTML。請問我想要這樣的效果,怎麼做才好。

回複內容:

在Codeigniter中,所有的請求一般都對應於一個Controller中的函數,如果對於不同的請求,如ajax和普通請求,返回的東西一般都會不一樣如this->load->view 或者直接echo。

兩種方法寫在一起讓我感覺特別不爽,我設想了一種方案就是使用Http頭中的Accept,如何產生一種方式,就是在一個函數中,不同的請求輸出不同的view樣式,比如ajax請求這個函數,就返回json格式,普通請求,就返回HTML。請問我想要這樣的效果,怎麼做才好。

ajax 請求一盤只管返回 json 資料,不會直接給 HTML 的,而 view 是直接 include 的 view,原理不一樣吧,如果你非要這麼種,那麼自訂一下 view 方法即可:

public function loadView($view, $data) {    if( $this->input->is_ajax_request() ) {        echo $this->load->view($view, $data, TRUE);        exit;    }    // 如果是 ajax 不會執行到這裡    $this->load-

以後你載入 view 時,使用 $this->loadView($viewName, $data) 而不再使用 $this->load->view(); 即可,這個 loadView 方法你可以寫在父 Contrller 裡面,這隻是思路,你可以按需求來定製!

在CodeIgniter的輸入類中已經提供了is_ajax_request()方法來判斷是否為ajax請求了,可以用$this->input->is_ajax_request()的形式來調用。

參見http://codeigniter.org.cn/user_guide/libraries/input.html。

首先,根據“單一職能原則”,是不建議你這樣設計一個功能的。你可以把主要功能封裝成一個可調用的方法,然後在不同的controller裡面分別調用這個方法來處理。另外,json也是view的一種展現形式,所以你完全可以把資料都傳進view裡面,只是兩個view不同在於,一個是HTML展示,一個是json展示

為什麼不在請求中添加一個請求參數來區分終端呢?

實在不行用UA也能區分的吧。

define('ISAJAX', isset($SERVER['HTTPXREQUESTEDWITH']) && strtolower($SERVER['HTTPXREQUESTED_WITH']) == 'xmlhttprequest');

判斷的時候這樣if(IS_AJAX) { 。。。}else { 。。。}

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.