/ / Ajax成功関数は、呼び出しが成功しても起動しません-jquery、ajax、cakephp

呼び出しが成功した場合でもAjaxの成功関数は起動しません - jquery、ajax、cakephp

私はajaxを使用してcakephpアプリにデータを保存しています。ajaxは、データを保存する範囲で機能します。送信ボタンをクリックすると、コメントがデータベースに保存され、コメントのリストに自動的に表示されます。しかし、私が何をしようとしても、「成功」機能では何も起こりません。アラートを受け取ることはできませんが、エラーアラートを受け取ることもできません。

どうしたの?これは、cakeがデータを返す方法と関係がありますか?私のコントローラーの追加機能では、保存部分が機能します。リクエストがajaxであるかどうかをチェックする部分は、何もしないようです。そこにリダイレクトを入れようとしましたが、ページがリダイレクトされません。明確にするために:ページをリダイレクトしたくない。ページにとどまりたい。ただし、成功すると何もできないため、「保存された」メッセージを表示したり、フォームフィールドをクリアしたりすることはできません。または他の何か。アイデア?

// my jquery script
$(document).ready(function () {
// Turn submit button into an ajax call
$("#save-comment input").click(function(){
saveComment();
});

// This function is called when the "save" button is clicked
function saveComment()
{
var formdata = $("#comment-form").serialize();
$.ajax({
type: "POST",
url: "/cakeblog/comments/add",
data: formdata,
success: function(result) {
alert("success");
},
error:function (){
alert("error");
}
});
}
});

// my controller
class CommentsController extends AppController {
public $name = "Comments";

public function add() {
if (!empty($this->data)) {
if($this->Comment->save($this->data)){
if($this->request->is("ajax")){
// nothing I put here seems to do anything
$this->redirect(array("action"=>"index"));
} else {
$this->Session->setFlash("Message sent");
$this->redirect(array("action"=>"index"));
}
}
}
}
}

回答:

回答№1は0

コードは正しいようです。いくつかの指針:

  1. JavaScriptコンソールにエラーがないか確認しますか?
  2. ブラウザのネットワークビューを確認します。サーバーはこのAJAX呼び出しの応答として何を送信しますか?まったく反応しますか?

回答№2の場合は0

コントローラでHttpResponseを返していません。返す必要があります Http Responsefunction add() 。そのためにあなたはする必要があります echo あなたのコントローラーで。

ajaxの検出が間違っているようです...以下を使用してajaxを検出します。

$this->set("isAjax", $this->RequestHandler->isAjax());

後もう一つ。コントローラでリダイレクトしています。そのビューではリダイレクトできません。ajaxの呼び出しを成功させるには、これを行う必要があります。