Im Versuch, CakePHP 3 sendet json Antwort auf meine Javascript-Funktion zu bekommen, wenn ich es nennen, aber ich weiß nicht, den richtigen Weg, es zu tun ..CakePHP 3 Ajax Request Response von Controller-Aktion
JS Funktion:
function add(){
//serialize form data
var formData = $('#newquestion').serialize();
//get form action
var formUrl = $(this).attr('action');
$.ajax({
type: 'POST',
url: formUrl,
data: formData,
success: function(status){
console.log('content='+status);
},
error: function(xhr,textStatus,error){
alert(error);
} });
}
CakePHP 3 Aktion:
public function addajax(){
if ($this->request->is('ajax')) {
$status['msg']="this is a message from cake controller";
$this->response->body(json_encode($status));
return $this->response;
}
}
Frage: Die obige CakePHP-Aktion funktioniert und sendet die richtige Ausgabe, aber ist es richtig; Soll ich nicht eine Ajax-Ansicht oder ein Ajax-Layout verwenden?
Wenn ich Serialize wie unten verwenden, funktioniert es nicht, kommt als "undefined" in der JavaScript-Funktion. Was mache ich falsch? und was ist der richtige Weg?
Ist das folgende Beispiel auch nicht korrekt?
public function addajax(){
if ($this->request->is('ajax')) {
//$this->viewBuilder()->layout('ajax');
//$this->autoRender = false; // Set Render False
$status['msg']="this is a message from cake controller";
$this->set(compact('status'));
$this->set('_serialize', ['status']);
//$this->response->body(json_encode($status));
//return $this->response;
}
}
PS: Ich habe JSON und XML-Routing und Ansichten aktiviert.
Ihre Aktion-Methode richtig ist nur nicht vergessen, am Anfang Ihres m hinzufügen ethod: $ this-> autoRender = false; . Allerdings kann ich nicht sagen, dass es die richtige Methode ist, Ajax in CakePHP zu verwenden 3. Dieser Artikel könnte helfen: http://www.dereuromark.de/2014/01/09/ajax-and-cakephp/ – user3078643
Der Artikel @ user3078643 schlägt vor, dass cakephp 2.0 nicht 3.0 ist. – user221931
@ user221931 Es gibt einen Abschnitt über CakePHP 3.x – user3078643