2012-03-21 99 views
0

我已经尝试了很多东西,无法弄清楚这一点,我使用这段代码,并且我知道开始工作,因为它连接到的脚本在数据库中粘贴一些信息,但回调从未运行。Ajax与JQuery的 - 回调不执行

<script type="text/javascript"> 
$(document).ready(function() { 
    $(document.body).on('click', "#reply_submit", function() { 
      var formData = $('#reply').serialize(); 


      $.post("newpost.php",formData, function(data){ 
        alert("hi"); 
      }, "json"); 
    }); 

});

我的表单的ID是“回复”,我用来提交它的按钮是“reply-submit”,只是为了确保这些事情是清楚的。

它也不工作,如果我删除最后一个“json”的事情顺便说一句。

+0

你得到的错误信息是什么? – Asdfg 2012-03-21 04:14:19

+0

检查你在控制台中得到的错误... – 2012-03-21 04:16:01

+0

你有我们可以看到的URL吗?如果你使用的是火虫,你会得到什么错误?你在Net标签下看到了什么样的反馈? – 2012-03-21 04:17:00

回答

1

如果你读了jQuery.post()的文档,它说这个关于回调:

成功(数据,textStatus,jqXHR)
如果请求成功时执行的回调函数。

如果它没有被调用,这意味着请求没有成功。在newpost.php(在数据插入后的某个时间,但通常会退出之前)可能有错误。

您还可以通过使用长形jQuery.ajax()而不是速记后赶上的错误条件:

$.ajax({ 
    url: 'newpost.php', 
    data: formData, 
    type: 'post', 
    dataType: 'json', 
    success: function(data, textStatus, jqXHR) { 
     alert('success'); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     alert('error!'); 
    } 
}); 
+0

我认为这是事实,我的后端脚本似乎突然间出现了一些错误。说实话,现在它有点模糊,但是,我认为这是问题: – Cocorico 2012-03-21 05:16:22

1

当您单击,形式也正在提交的标准方式。修改你的点击处理程序是这样的:

$(document).on('click', "#reply_submit", function(e) { 
    e.preventDefault(); // prevent the default submit event 
    var formData = $('#reply').serialize(); 
    // ... 
}); 

虽然我觉得document.body应该是jQuery来包装一个有效的节点,我也它修改为较常用的document

在该注意事项中,如果窗体永远不会被Ajax事件或其他DOM修改所破坏,您可以绑定到#reply而不是document(或body)。

1

我只是假设你想提交一个表单而不用重新加载整个页面。 基于这一假设,以下代码将用于此目的。

$(document).ready(function(){ 

//on form submit event 
$('form#reply').submit(function(){ 
    $.post('newpost.php',$(this).serialize(),function(){ 
     alert("Message or do something with the response data if you are expecting one"); 
    }); 

    //prevent default action 
    return false; 
}); 

}); 

如果这不是您在项目中寻找的功能,请忽略该帖子。