2011-01-28 93 views
0

我想創建一個twitter應用程序,其中用戶輸入一些數據到表單中,並通過使用ajax(jQuery庫)用戶看到他們提交的實時轉到頂部的所有其他數據。PHP(Codeigniter)和ajax幫助

它的工作方式是用戶提交表單並將數據提交給數據庫,我也想使用ajax將數據添加到數據列表中。

我的問題是我只能訪問PHP方法從ajax請求創建的數據,如果我在我的php方法中使用了echo $var;,這對我來說看起來不正確,有些人可以告訴我我做錯了什麼嗎?

public function feed() { 
     $this->load->library('form_validation'); 
     $this->load->helper('dates'); 
     $data['feed'] = $this->f->get_feed_by_employer($this->session->userdata('employer_id')); 
     $this->form_validation->set_error_delimiters('<div class="error">', '</div>'); 
     $this->form_validation->set_rules('content', 'content', 'required|trim|max_length[140]'); 
     $this->form_validation->set_rules('retrain', 'retrain position', 'trim|max_length[1]'); 

     if ($this->form_validation->run() == FALSE) 
     { 
      echo validation_errors('<div class="error">', '</div>'); 
      $this->template->build('employer/feed', $data); 
     } 
     else 
     { 
      $insert = array(
       'content' => $this->input->post('content'), 
       'retrain' => $this->input->post('retrain'), 
       'created_at' => time(), 
       'employers_id' => $this->session->userdata('employer_id') 
      ); 

      if($this->f->insert($insert)) { 
       echo $insert['content']; 
      } 
     } 
} 

和jQuery的

$('#employer_feed').submit(function(){ 
    $.ajax({ 
     url: '/employer/feed', 
     data: $('#employer_feed').serialize(), 
     type: 'POST', 
     success:function(html) { 
      $('#feed').append('<div class="feed_item">'+html+'</div>'); 
     } 
    }); 
    return false; 
}); 

回答

2

有沒有用Ajax請求打交道時使用echo的問題,其實這是要走的路。您也可以使用echo json_encode($output);,具體取決於您的ajax請求類型。

檢查此article,使用is_ajax知道何時到echo以及何時加載您的意見是一種乾淨的方式!在config/autoload.php

<?php 

function is_ajax(){ 
    return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) 
      && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'); 
} 

而且:

所以application/helpers/文件夾中創建一個文件is-ajax_helper.php

$autoload['helper'] = array('is-ajax'); 

而就檢查它是否是一個Ajax調用或不!

編輯:
因爲笨2.0正式出來,現在的插件與助手代替,我已經更新我的答案。

0

如今,您只需使用$this->input->is_ajax_request()the input class)即可獲得與@ifaour手工製作的幫手相同的效果。