2015-06-22 2 views
0

Все вызовы 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.

+0

Это потому, что вы загружаете представления в функцию добавления. AJAX вернет все, что есть на странице, видимо, это HTML. –

ответ

0

contracts/add верните полный HTML-код, потому что вы его загружаете. Попробуйте удалить «упаковочную» просмотров:

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

Edit: Вы можете также сделать что-то вроде этого, если вам нужно, чтобы показать полный HTML для не-Ajax запросов (хотя было бы предпочтительнее использовать отдельный controlles для АЯКС VS. не-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'); 
    } 
} 
+0

Функция add() просто загружает мою «страницу добавления», а представление «контракты/добавление» содержит только входную форму HTML. Так что мне нужны все эти взгляды, да. Создание отдельных контроллеров не помогло, проблема остается: функция index() для * начальной страницы * и функция add() для * добавить страницу * равны, но AJAX-вызовы с * начальной страницы работают нормально, хотя все вызовы из * добавить страницу * (на этот контроллер или на другой сайт) возвращает html * добавить страницу *. –

+0

Попробуйте помещать ведущую косую черту '/' перед адресом в вашем вызове ajax. Это исправить вашу проблему? – PiranhaGeorge

+0

Да, я добавил ведущую косую черту и изменил URL-адрес, и он начал работать! Благодаря! –

0

В функции add(), вы загружаете все Views, вот почему вы ПОЛУЧАТЬ все HTML содержания и вы передаете этот переменные $ л в функции 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().

+0

По-прежнему не понимаю. Функция «index()» для начальной страницы такая же, и все там отлично работает. Пожалуйста, напишите образец, потому что я не понимаю, как это может выглядеть? –

+0

Что именно вы хотите сделать в этой функции 'add'? – Abhinav

+0

Загрузите HTML-страницу с заголовком, меню, нижним колонтитулом и формой ввода. –

0

Путь выхода после эхо-данных.

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

    echo $data; 
    exit; 
} 
Смежные вопросы