使用location.reload()似乎阻止php更新db

时间:2017-06-28 13:10:17

标签: javascript php mysqli bootbox

现在已被这个人困住了一段时间,无法弄清楚我做错了什么。以下代码使用bootbox.js按钮删除我正在处理的社交网络上的帖子:

    <script>

    $(document).ready(function() {

        $('#post<?php echo $p_id; ?>').on('click', function() {
            bootbox.confirm("Are you sure you want to delete this post?", function(result) {

                $.post("./includes/form_handlers/delete_post.php?post_id=<?php echo $p_id; ?>", {result:result});
                /*This breaks*/
                //if(result)
                   //location.reload();


            });
        });


    });


    </script>

由于某些原因,调用location.reload似乎阻止我的php处理程序执行sql语句(这是一个简单的更新查询)。奇怪的是,当它被注释掉时,db会毫无问题地更新。

有人可以向我解释这个并且可能会推荐一个解决方案吗?

3 个答案:

答案 0 :(得分:4)

您在HTTP呼叫和页面重新加载之间进行竞争。页面重新加载将终止http请求,它不会等待它完成。

因此,解决方案是在成功回调中移动重新加载行。

$.post("./includes/form_handlers/delete_post.php?post_id=<?php echo $p_id; ?>", {result:result})
  .done( function(){ window.location.reload(true); });

答案 1 :(得分:1)

您的location.reload();在ajax调用完成之前正在执行,因此ajax调用可以运行直到结束。

正确的方法是等待ajax调用响应,然后再进行重新加载:

$.post("./includes/form_handlers/delete_post.php?post_id=<?php echo $p_id; ?>", {result:result}).done(function(){ location.reload(); });

此处有更多信息:https://api.jquery.com/jquery.post/#jqxhr-object

答案 2 :(得分:1)

当您致电location.reload时,您的浏览器会取消所有XHR请求。您应该使用$.post的成功回调来重新加载,如下所示:

$.post("./includes/form_handlers/delete_post.php?post_id=<?php echo $p_id; ?>", {result:result})
.done(function( data ) {
    location.reload();
});