私は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コードは正しいようです。いくつかの指針:
- JavaScriptコンソールにエラーがないか確認しますか?
- ブラウザのネットワークビューを確認します。サーバーはこのAJAX呼び出しの応答として何を送信しますか?まったく反応しますか?
回答№2の場合は0
コントローラでHttpResponseを返していません。返す必要があります Http Response
に function add()
。そのためにあなたはする必要があります echo
あなたのコントローラーで。
ajaxの検出が間違っているようです...以下を使用してajaxを検出します。
$this->set("isAjax", $this->RequestHandler->isAjax());
後もう一つ。コントローラでリダイレクトしています。そのビューではリダイレクトできません。ajaxの呼び出しを成功させるには、これを行う必要があります。