CodeIgniter / jQuery – вызов Ajax возвращает полную html-страницу вместо моего эха

На мой взгляд, у меня есть вызов ajax:

$(".previous").click(function() { $.ajax({ type: "POST", url: "planner/get_cal", data: {current_month: current_month}, success: function(msg){ alert(msg); } }); 

функция get_cal в моем контроллере Planner:

 function get_cal() { echo "dinosaurs"; } 

Однако вместо того, чтобы возвращать «динозавры», он возвращает полную HTML-страницу. Я не могу понять, почему. Мысли? Большое спасибо.

Solutions Collecting From Web of "CodeIgniter / jQuery – вызов Ajax возвращает полную html-страницу вместо моего эха"

Я решил это, используя ведущую косую черту, как это было предложено в комментариях к моему вопросу.

 $.ajax({ type: "POST", url: "/planner/get_cal", dataType: "text", data: {current_month: current_month}, success: function(msg){ alert(msg); } }); 

Вы также можете получить его, добавив exit после эха в ваш php-файл, как показано ниже:

 function get_cal() { echo "dinosaurs";exit; } 

Это будет работать. 🙂

Попробуйте установить для dataType значение "text"

 $.ajax({ type: "POST", url: "planner/get_cal", data: {current_month: current_month}, dataType: "text", success: function(msg){ alert(msg); } }); 

При использовании структуры CodeIgniter сегментов uri Controler / Method я нашел гораздо проще использовать ../../controller/method как мой URL-адрес в jQuery-запросах ajax. Я также рекомендую указать тип данных, чтобы строка анализировалась и возвращалась как объект.

Вот пример;

 $.ajax({ type: "POST", dataType: "json", url: "../../controller/method", success: mySuccessFunction }); 

Эти проблемы возникают, когда ваш php-файл и html-файл не находятся на правильном пути, чтобы сервер Apache мог анализировать файлы php. Без упоминания типа: «текст» и любой другой формат также будет работать ajax. Но убедитесь, что ваш сервер достигает файла php. В противном случае весь файл будет обрабатываться как текст и возвращен.

Для тех, кто использует Zend Framework, я испытывал те же проблемы, когда ответ AJAX возвращал полный HTML вместо ответа json_encode() . Это было решено, добавив следующее к моему контроллеру:

  if ($this->getRequest()->isXmlHttpRequest()) { $this->_helper->layout()->disableLayout(); $this->_helper->viewRenderer->setNoRender(true); } 

Просто хотел бы упомянуть: url действительно будет зависеть от того, как у вас есть настройка .htaccess и структуры папок. Поэтому лучший способ – попробовать несколько URL-адресов, то есть:
../../controller/method
../controller/method
server_folder / index.php / контроллер / метод
http://example.com/server_folder/index.php/controller/method
а затем выберите тот, который лучше всего работает в данной ситуации.