我正在尝试通过在页面加载时调用ajax请求来在后台处理数据库插入。我面临的问题是,即使从页面(发出ajax请求的页面)移动,它仍然在等待ajax页面中的进程完成。
我不希望从ajax页面输出任何内容,只需启动并继续运行,直到所有insert语句都完成。在研究了这个主题之后,我发现了一些解决方案,但它们并不适用于我的情况。我正在使用以下代码:
<?php
ignore_user_abort(true);
?>
<!DOCTYPE html>
<html>
<head>
<script src="jquery.js"></script>
<script>
$(function(){
$.ajax({
url:'ajax-page.php',
success:function(ret)
{
// of no consequence as I'm not interested in output
}
});
});
</script>
</head>
<body>
<a href="somepage.php">Click Me</a>
</body>
</html>
ob_end_clean();
header("Connection: close");
ignore_user_abort(true);
ob_start();
echo (' ');
$size = ob_get_length();
header("Content-Length: $size");
ob_end_flush();
flush();
if(session_id())session_write_close();
// background process to start here
for($i=1; $i<=10;$i++)
{
// perform insert query here
sleep(1);
}
现在,如果我点击单击我,导航将一直等到循环(ajax页面中的那个)完成执行。插入所有10条记录后,导航将继续进行。
AFAIK,我想我通过ignore_user_abort()
,flush()
,session_write_close()
等使用了所有建议的技巧。我错过了其他什么吗?
答案 0 :(得分:1)
尝试在jQuery ajax调用中添加async:true:
$.ajax({
url:'ajax-page.php',
async: true,
success: function() {
// of no consequence as I'm not interested in output
}
});