页面 /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
。
答案 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;
}