На мой взгляд, у меня есть вызов 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-страницу. Я не могу понять, почему. Мысли? Большое спасибо.
Я решил это, используя ведущую косую черту, как это было предложено в комментариях к моему вопросу.
$.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
а затем выберите тот, который лучше всего работает в данной ситуации.