CodeIgniter:AJAX返回当前页面的{h}内容

时间:2015-06-22 08:32:16

标签: jquery ajax codeigniter

页面 /index.php/contracts/add/new 上的所有AJAX调用(我使用jQuery)都会返回此页面的完整html。但是这些对 /index.php/contracts / 的调用工作正常。似乎错误不在PHP或JS代码中,而是在配置中。

以下是我的控制器合同,其中包含两个用于AJAX(get_info()add_contract())的函数:

<?php
    class Contracts extends CI_Controller {

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

    public function index()
    {
            $this->load->view('templates/header');
            $this->load->view('templates/menu');
            $this->load->view('contracts/index');
            $this->load->view('templates/footer');
            $this->load->view('contracts/scripts');
    }

    public function add($smth)
    {                
        $this->load->view('templates/header');
        $this->load->view('templates/menu');
        $this->load->view('contracts/add');
        $this->load->view('templates/footer');
        $this->load->view('contracts/scripts_add');
    }

    public function get_info($contract_id)
    {
        $data = $this->contracts_model->get_contract($contract_id);     

        echo $data;
    }

    public function add_contract($contract_id)
    {
        echo "ok";          
    }

   }
 ?>

AJAX在我的观点中调用:

var contract_id = 1;
        $.ajax({
            type: "POST",
            url: "contracts/get_info/"+contract_id, 
            cache: false, 
            async: false,  
            success: function(data){                                        
                console.log(data);

            }
        });

contract_id = 2; 
$.ajax({
        type: "POST",
        url: "contracts/add_contract/" + contract_id, 
        cache: false, 
        async: false,
        success: function(data){
             console.log(data); 
            }
        });

所以我成功地从$data获得get_info()并且&#34;确定&#34;来自索引页面中的add_contract(),但在 contracts / add 中,这些调用将返回页面 contract / add 的所有html内容。

UPD: 问题在评论中得到解决 在contracts/add页面中的AJAX调用中,必须将网址从contracts/get_info更改为/index.php/contracts/get_info

3 个答案:

答案 0 :(得分:0)

add()函数中,您正在加载所有Views,这就是您收到所有HTML内容并传递此变量 $ smth 在add()函数中,但您没有在任何地方使用它。

 public function add($smth)
    {           
    // YOU ARE LOADING ALL THE VIEWS A.K.A ALL HTML CONTENT     
        $this->load->view('templates/header');
        $this->load->view('templates/menu');
        $this->load->view('contracts/add');
        $this->load->view('templates/footer');
        $this->load->view('contracts/scripts_add');
    }

您可以在其他一些函数中加载这些视图,并返回您想要从datas函数返回的add()

答案 1 :(得分:0)

contracts/add返回完整的HTML,因为您专门加载了它。尝试删除&#39;包装&#39;的观点:

public function add($smth) { //what's $smth all about - you're not using it
    $this->load->view('contracts/add');
}

编辑:如果你需要为非ajax请求显示完整的HTML,你也可以这样做(尽管最好为ajax和非ajax使用单独的控件)。

public function add() {
    if ($this->input->is_ajax_request()) {
        $this->load->view('contracts/add');
    } else {
        $this->load->view('templates/header');
        $this->load->view('templates/menu');
        $this->load->view('contracts/add');
        $this->load->view('templates/footer');
        $this->load->view('contracts/scripts_add');
    }
}

答案 2 :(得分:0)

在回显数据之后放置。

public function get_info($contract_id)
{
    $data = $this->contracts_model->get_contract($contract_id);     

    echo $data;
    exit;
}