1

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

どうしたの?これはケーキがデータを返す方法と関係がありますか? 私のコントローラーの追加機能では、保存部分が機能します。リクエストが 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'));
  }
    }
  }
}
}
4

2 に答える 2

1

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

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

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

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

于 2012-06-01T10:19:12.467 に答える
0

コードは正しいようです。いくつかのポインタ:

  1. JavaScript コンソールでエラーを確認しますか?
  2. ブラウザのネットワーク ビューを確認してください: サーバーはこの AJAX 呼び出しの応答として何を送信しますか? それはまったく反応しますか?
于 2012-06-01T10:19:30.017 に答える