页面上的所有 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;
}