CakePHP: Controller Antwort für Ajax-Request ist falsch
-
26-09-2019 - |
Frage
Ich bin mit jQuery eine AJAX-Anforderung zu einem gewissen Controller-Aktion zu machen. Diese Anforderung wird von einer Schaltfläche in der Ansicht der Bearbeitungsaktion in dem gleichen Regler aktiviert.
Mein Problem: Der Ajax-Request kehrt die gesamten Code der Edit-Ansicht (mit allen Formen und Eingängen) anstelle der erwarteten Zahl. Wenn ich die gleiche Ajax-Schaltfläche in der Ansicht des Add die Tat umzusetzen, es funktioniert perfekt (es gibt die Anzahl).
Die bearbeiten und hinzufügen Aktionen bleibt als standardmäßig (mit bake) erzeugt wird.
Dies ist die jQuery-Funktion, den Ajax-Request
zu machen $.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
});
}
Dies ist die Aktion
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();
}
}
}
Warum ist das passiert?
Danke
Lösung 2
fixed ich das Problem. Es war die URL param in der Schnipsel-Funktion (ein noob Fehler)
Es sollte ein vollständiger Pfad auf die referenzierte Aktion in der Steuerung sein.
Diese Frage hat mir geholfen, das Problem zu verstehen: best practice URL verwenden Aktion während Ajax-Aufruf in CakePHP
Fixed Ajax Anfrage:
$.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
});
Dank und entschuldigen Sie mein Englisch
Andere Tipps
Nur ein Vorschlag ohne Zugriff auf alles zu haben, haben Sie versucht das?
$this->autoRender = false;
$this->layout = 'ajax';
Auch schlage ich würde es einfach zu halten:
$.post("/controller/checkTargets", function(data) {
alert(data);
}
function checkTargets() {
$this->autoRender = false;
$this->layout = 'ajax';
echo "Im working";
}
und gehen von dort aus.