CakePhp: ответ контроллера для запроса AJAX неверно
-
26-09-2019 - |
Вопрос
Я использую jQuery, чтобы сделать запрос AJAX к некоторому действию контроллера. Этот запрос активирован из кнопки в поле зрения действий редактирования в том же контроллере.
Моя проблема: запрос AJAX возвращает весь код редактирования (со всеми формами и входами) вместо ожидаемого числа. Если я положил одну и ту же кнопку AJAX в поле «Добавить действие», он работает идеально (возвращает номер).
Редактирование и добавление действий остается таким же сгенерированным по умолчанию (с помощью испеки).
Это функция jQuery, чтобы сделать запрос AJAX
$.ajax({
type: 'POST',
url: 'checkTargets',
data: {target: tgt_array, channel: channel_type},
success:function(data){
$('#num_subscribers > span').html(data);
},
error:function(){
$('#num_subscribers > span').html("The subscribers could not be loaded");
},
timeout: 5000
});
}
Это действие
function checkTargets() {
if ($this->RequestHandler->isAjax()) {
if(!empty($this->params['form'])) {
$data = $this->params['form'];
if ($data['channel'] === 'SMS') {
$channel = 'sms';
} else {
$channel = 'pin';
}
$targets = $this->processPostTargets($data['target']);
$this->RequestHandler->respondAs('text');
//This echo a NUMBER
echo ClassRegistry::init('Selection')->countSubscribersInTarget($channel, $targets);
Configure:: write('debug', 0);
$this->autoRender = false;
exit();
}
}
}
Почему это происходит?
Спасибо
Решение 2
Я исправил проблему. Это был url param в функции .ajax (ошибка Noob)
Это должен быть полный путь к ссылочным действию в контроллере.
Этот вопрос помог мне понять проблему:Лучшая практика для использования URL-адреса действия при вызове AJAX в CakePhp
Исправлен запрос AJAX:
$.ajax({
type: 'POST',
url: '/myapp/campaigns/checkTargets',
data: {target: tgt_array, channel: channel_type},
success:function(data){
$('#num_subscribers > span').html(data);
},
error:function(){
$('#num_subscribers > span').html("The subscribers could not be loaded");
},
timeout: 5000
});
Спасибо и извините мой английский
Другие советы
Просто предложение, не имея доступа ко всему, вы попробовали это?
$this->autoRender = false;
$this->layout = 'ajax';
Также я бы предложил держать его простой:
$.post("/controller/checkTargets", function(data) {
alert(data);
}
function checkTargets() {
$this->autoRender = false;
$this->layout = 'ajax';
echo "Im working";
}
И пойти оттуда.