在后台运行ajax页面(Android)

时间:2013-12-28 09:39:41

标签: php android ajax background-process

我正在尝试通过在页面加载时调用ajax请求来在后台处理数据库插入。我面临的问题是,即使从页面(发出ajax请求的页面)移动,它仍然在等待ajax页面中的进程完成。

我不希望从ajax页面输出任何内容,只需启动并继续运行,直到所有insert语句都完成。在研究了这个主题之后,我发现了一些解决方案,但它们并不适用于我的情况。我正在使用以下代码:

的index.php

<?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>

Ajax的page.php文件

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()等使用了所有建议的技巧。我错过了其他什么吗?

1 个答案:

答案 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
  }
});