Все вызовы AJAX (я использую jQuery) на странице /index.php/contracts/add/new верните полный html этой страницы. Но эти звонки на /index.php/contracts/ работают нормально. Похоже, что ошибка не в PHP или JS-коде, а в конфигурации.CodeIgniter: AJAX возвращает html-содержимое текущей страницы
Вот мой контроллер контракты с двумя функциями, которые я использую для 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()
и «ok» от add_contract()
на индексной странице, но в контрактов/добавить эти ca lls возвращает все содержимое html на странице контрактов/добавить.
UPD: Проблема решена в комментариях. В адресах AJAX в contracts/add
URL-адрес страницы должен быть изменен с contracts/get_info
на /index.php/contracts/get_info
.
Это потому, что вы загружаете представления в функцию добавления. AJAX вернет все, что есть на странице, видимо, это HTML. –