CodeIgniter:AJAX 返回当前页面的 html 内容



页面上的所有 AJAX 调用(我使用 jQuery)在页面/index.php/contracts/add/new 返回此页面的完整 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); 
            }
        });

所以我成功地从索引页面中的get_info()add_contract()中获取$data,但在合同/添加中,这些调用返回页面合同/添加的所有 html 内容。


上级:问题在评论中解决。在 AJAX 中contracts/add页面 URL 必须从 contracts/get_info 更改为 /index.php/contracts/get_info

contracts/add返回完整的 HTML,因为您专门加载它。尝试删除"换行"视图:

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');
    }
}

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

 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');
    }

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

在回显数据之后放置退出。

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

最新更新