我有一个需要很长时间才能运行的PHP进程。我不希望调用它的AJAX进程等待它完成。当PHP进程完成时,它将在数据库中设置一个字段。应该有某种AJAX轮询调用来定期检查数据库字段并设置消息。
如何设置jQuery AJAX调用而不是等待? PHP脚本是否必须执行任何特殊操作?
答案 0 :(得分:2)
更容易进行服务器端操作,只需响应否定响应,直到值准备就绪,并设置客户端重复轮询(使用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
答案 1 :(得分:2)
第1步:第一次调用长时间运行的进程 - 设置ignore_user_abort(true);在PHP脚本中需要很长时间并关闭连接。
第2步:检查数据库字段是否使用建议的方法更新。
答案 2 :(得分:0)
一个快速的解决方法是创建另一个PHP脚本,您可以调用它来检查它,因为直接通过AJAX的comm方法访问DB并不是一个好习惯。
SetInterval('yourfunctionname',100)
,以便您可以调用轮询脚本。答案 3 :(得分:0)
你的意思是通常的民意调查(而不是长期民意调查)?如果是,也许这会有所帮助:http://jquery-howto.blogspot.com/2009/04/ajax-update-content-every-x-seconds.html
PHP脚本只检查数据库字段,并立即返回true / false。