CakePHP: respuesta del controlador para el Ajax solicitud es incorrecto
-
26-09-2019 - |
Pregunta
Estoy usando jQuery para hacer una petición AJAX a alguna acción del controlador. Esta solicitud se activa desde un botón en la vista de la acción de edición en el mismo controlador.
Mi problema: La petición Ajax está volviendo todo el código de la vista de edición (con todas las formas y los insumos) en lugar de la cantidad esperada. Si pongo el mismo botón Ajax en la vista de la acción complemento, funciona perfecto (que devuelve el número).
La editar y agregar acciones restos como la generada por defecto (con hornear).
Esta es la función de jQuery para hacer la petición 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
});
}
Esta es la acción
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();
}
}
}
¿Por qué sucede esto?
Gracias
Solución 2
Me solucionó el problema. Fue el parámetro URL en la función .ajax (un error novato)
Debe ser una ruta completa a la acción que se hace referencia en el controlador.
Esta pregunta me ayudó a entender el problema: las mejores prácticas para el uso URL de acción, mientras que el Ajax en llamar CakePHP
Fijo petición 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
});
Gracias y disculpe mi Inglés
Otros consejos
Sólo una sugerencia sin tener acceso a todo, ¿Has probado esto?
$this->autoRender = false;
$this->layout = 'ajax';
También te sugiero hacer que sea sencillo:
$.post("/controller/checkTargets", function(data) {
alert(data);
}
function checkTargets() {
$this->autoRender = false;
$this->layout = 'ajax';
echo "Im working";
}
e ir de allí.