我有一个 PHP 进程需要很长时间才能运行。我不希望调用它的 AJAX 进程等待它完成。当 PHP 进程完成时,它将在数据库中设置一个字段。应该有某种 AJAX 轮询调用来定期检查数据库字段并设置消息。
如何设置 jQuery AJAX 调用来轮询而不是等待?PHP 脚本是否必须做任何特别的事情?
我有一个 PHP 进程需要很长时间才能运行。我不希望调用它的 AJAX 进程等待它完成。当 PHP 进程完成时,它将在数据库中设置一个字段。应该有某种 AJAX 轮询调用来定期检查数据库字段并设置消息。
如何设置 jQuery AJAX 调用来轮询而不是等待?PHP 脚本是否必须做任何特别的事情?
让您的服务器端操作更容易,只需用否定响应进行响应,直到值准备好并设置客户端重复轮询(使用 setTimeout()),直到收到肯定响应或固定数量的失败是观测到的。
var timer;
var count = 0;
function poll(url) {
timer = setTimeout(function() {
$.ajax({
url: url,
success: function(data) {
if (data.Status) {
...do something...
}
else {
if (++count > 10) {
...failure action...
}
else {
poll(url);
}
}
...other options...
})
},5000)
}
然后在服务器端使用一些东西(伪代码)......
if operation is not complete
return serialize( { Status : false } )
else
data = ....
data.Status = true
return serialize(data)
end
第一步:第一次调用长时间运行的进程——设置ignore_user_abort(true); 在 PHP 脚本中需要很长时间并关闭连接。
第 2 步:检查是否使用建议的方法更新了 DB 字段。
一种快速的解决方法是创建另一个 PHP 脚本,您可以调用它来检查它,因为通过 AJAX 的 comm 方法直接访问 DB 不是一个好习惯。
SetInterval('yourfunctionname',100)
,以便您可以调用轮询脚本。你的意思是通常的轮询(而不是长轮询)?如果是,也许这会有所帮助:http: //jquery-howto.blogspot.com/2009/04/ajax-update-content-every-x-seconds.html
PHP 脚本只会检查数据库字段,并立即返回真/假。