即使调用成功,Ajax成功函数也不会触发

时间:2012-06-01 10:16:02

标签: jquery ajax cakephp

我正在使用ajax在cakephp应用中保存数据。 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'));
  }
    }
  }
}
}

2 个答案:

答案 0 :(得分:0)

您尚未在控制器中返回Http Response。您需要在Http Response中返回function add()。为此,您需要在控制器中echo

似乎检测ajax是错误的...使用下面的方法来检测ajax。

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

还有一件事。您在控制器中重定向.u无法在该视图中重定向。你必须成功调用你的ajax。

答案 1 :(得分:0)

代码看起来正确。一些指示:

  1. 检查JavaScript控制台是否有错误?
  2. 检查浏览器的网络视图:服务器发送什么作为此AJAX呼叫的回复?是否有回应?