在Codeigniter中返回AJAX调用的结果

时间:2014-03-14 06:02:30

标签: php ajax codeigniter

我想在我的codeigniter应用程序中实现AJAX,但我对如何将数据返回到视图一无所知。我也不确定我是否以正确的方式执行控制器。但是,当我收到下面的消息时,AJAX调用是成功的

XHR finished loading:

$.ajax({    
              type: "post",
              cache:true,   
              url: "<?php echo site_url('getrates/index'); ?>",              
            }).done(function() {
              $("#ajax-message").html("Success");
            });

这是控制器

class Getrates extends CI_Controller {

public function __construct()
{
    parent::__construct();
    $this->load->model('getrates');
}

public function index()
{
     $username = $sess_array['username'];

     $data['rates'] = $this->getrates->index($username); 

     $this->load->view('dashboard', $data['rates']);         

}

}

和模型

class Rates extends CI_Model {


public function __construct()
{
    parent::__construct();


}

function index($user) {

    $username = $user;

    $sql = "SELECT * FROM tarrifs WHERE username = ? "; 

    $rates = $this->db->query($sql, array(1, $username));

    return $rates;

}

}

2 个答案:

答案 0 :(得分:0)

请在消息部分输入ajax响应,试试这种方式

 $.ajax({    
                  type: "post",
                  cache:true,   
                  url: "<?php echo site_url('getrates/index'); ?>",              
                }).done(function(data) {
                  $("#ajax-message").html(data);
                });

在模型中

function index($user) {

    $username = $user;

    $sql = "SELECT * FROM tarrifs WHERE username = {$username} "; 

    $rates = $this->db->query($sql);

    return $rates->row_array(); // return single row in array

}

控制器请尝试这种方式

public function index()
{
     $username = $sess_array['username'];

     $data['rates'] = $this->getrates->index($username); 
     // true parameter return view data
     echo $this->load->view('dashboard', $data['rates'], true);       
     die();

}

答案 1 :(得分:0)

我猜测$ .ajax没有检索到来自你的控制器的任何数据,也许是因为它指向了错误的网址,也许你应该用它替换它:

url: "<?php echo site_url('getrates'); ?> 

引用codeigniter controllers works的方式,而不是在该控制器中加载视图,而是尝试回显从模型接收的值,因此$ .ajax不会检索控制器呈现的整个视图,即:

$username = $sess_array['username'];
$data['rates'] = $this->getrates->index($username);
echo json_encode($data['rates']) or return json_encode($data['rates'])

哪一个最适合您,然后更改某个页面中存在的占位符的ID,然后加载该控制器而不是您现在加载的控制器:

$("#a-different-page").html(data);

至于你的模型,我不确定将模型函数命名为“index”是否不正确,但我建议用更合适的函数命名,如函数model_genrates(){}

希望它有所帮助,欢呼!