现在已被这个人困住了一段时间,无法弄清楚我做错了什么。以下代码使用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会毫无问题地更新。
有人可以向我解释这个并且可能会推荐一个解决方案吗?
答案 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(); });
答案 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();
});