0

我已经尝试了很多东西,但无法弄清楚,我正在使用这段代码,并且我知道启动正在工作,因为它连接到的脚本在数据库中保留了一些信息,但回调从未运行。

<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 是“回复”,而我用来提交它的按钮是“回复-提交”,只是为了确保这些事情是清楚的。

如果我删除最后一个“json”东西,它也不起作用。

4

3 回答 3

1

如果您阅读jQuery.post()的文档,它会说明回调:

success(data, textStatus, jqXHR)
请求成功时执行的回调函数。

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

您还可以使用长格式jQuery.ajax()而不是 post 简写来捕获错误情况:

$.ajax({
    url: 'newpost.php',
    data: formData,
    type: 'post',
    dataType: 'json',
    success: function(data, textStatus, jqXHR) {
        alert('success');
    },
    error: function(jqXHR, textStatus, errorThrown) {
        alert('error!');
    }
});
于 2012-03-21T04:14:35.090 回答
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)。

于 2012-03-21T04:17:54.263 回答
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;   
});

}); 

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

于 2012-03-21T05:09:07.333 回答