希望可以有人帮帮我。
我有一个将变量传递给 php 文件 (thumbs.php) 的 ajax 脚本 (index.php)。
php 文件从原始图像生成缩略图并将它们存储在服务器上。此过程可能需要相当长的时间才能完成(最多 10 分钟)。
在这个过程进行的同时,我有一个覆盖层告诉用户等待。这一切都很好。
但是,一旦 php 脚本返回“true”(即完成),覆盖应该会消失。
问题:覆盖并没有消失。我可以在 Firebug 中看到 index.php 不等待 thumbs.php 的响应。它总是在 1-1.5 分钟左右超时。我不知何故需要保持连接打开。
... more code here
(function worker() {
$.ajax({
url: 'thumbs.php',
type: 'POST',
dataType: 'json',
data: dataPass,
beforeSend: function(){
$('.overlay').show();
$('.result').show();
$('.resultText').html("<center>Please wait whilst we create thumbnail images for this folder.<br><br>This is a one time operation.<br><br>Please be patient.</center>");
},
success: function(data){
$.each(data, function(i, obj){
alert(obj.count); // THIS should return true when finished
});
},
complete: function() {
$('.overlay').hide();
$('.result').hide();
}
});
})();
...more code here
编辑:
好吧,我还有一点!
脚本现在可以正常循环,但永远不会停止!clearTimeout(timer) 不会清除,即使两个警报框显示相同的 id。
任何更多的帮助非常感谢!
(function poll(){
var timer = 0;
var timer = setTimeout(function(){
alert("timer 1: " + timer);
$.ajax({
url: 'thumbs.php',
type: 'POST',
dataType: 'json',
data: dataPass,
success: function(data){
$.each(data,function(i,j){
reply = j.count;
});
if(reply == 'true'){
alert("timer 2: " + timer);
clearTimeout(timer);
$('.overlay').hide();
$('.result').hide();
}
},
complete: function(){
poll();
}
});
},3000);
})();
更多编辑:
好吧,我可以看到我的问题。这段代码
if(reply == 'true'){
alert("timer 2: " + timer);
clearTimeout(timer);
$('.overlay').hide();
$('.result').hide();
}
在 setTimeout 内运行,因此计时器永远不会被清除。因此,整个代码永远运行。解决方案是什么?