CakePHP: Réponse du contrôleur Ajax demande est erroné
-
26-09-2019 - |
Question
J'utilise jQuery pour faire une demande d'AJAX à une action du contrôleur. Cette demande est activée à partir d'un bouton dans la vue de l'action d'édition dans le même contrôleur.
Mon problème: La demande Ajax revient tout le code de la vue d'édition (avec toutes les formes et entrées) au lieu du nombre prévu. Si je mets le même bouton ajax dans la vue de l'action add, il fonctionne parfaitement (il renvoie le nombre).
Le modifier et ajouter des actions demeure générée par défaut (avec cuire au four).
Ceci est la fonction de jQuery pour faire la demande 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
});
}
Ceci est l'action
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();
}
}
}
Pourquoi est-ce qui se passe?
Merci
La solution 2
Je résolu le problème. Il était l'URL dans param la fonction .ajax (une erreur noob)
Il doit être un chemin complet à l'action référencée dans le contrôleur.
Cette question m'a aidé à comprendre le problème: les meilleures pratiques à l'URL d'action tout en appelant l'utilisation ajax en cakePHP
Correction demande 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
});
Merci et excusez mon anglais
Autres conseils
Juste une suggestion sans avoir accès à tout, avez-vous essayé?
$this->autoRender = false;
$this->layout = 'ajax';
De plus, je vous suggère de le garder simple:
$.post("/controller/checkTargets", function(data) {
alert(data);
}
function checkTargets() {
$this->autoRender = false;
$this->layout = 'ajax';
echo "Im working";
}
et aller de là.