【发布时间】:2014-05-19 17:34:54
【问题描述】:
在对两个不同的页面进行一些 ajax 调用时,一个页面不断发送响应,而另一个页面则继续加载并在完成后发送响应。
这就是我正在做的:
$('.container').html('Please wait... Working : <span id="done">0</span></div>').fadeIn("slow");
$.post('work.php',{'p' : 'proccessImages'},function(data){
if(data == "success"){
$('div.container').html("Images processed!").slideDown(3000);
}
});
现在我实际上在做的是,当进行上述调用时,“Work.php”会创建一些需要时间的图像缩略图,而还有另一个名为“done.php”的脚本会检查有多少图像生成并使用 JSON 响应,当“Work.php”完成处理时,它还会发回“成功”消息。这是另一个函数,它使用已经完成的图像更新 id 为“完成”的跨度!
function repeatJSON(){
$.getJSON( "http://localhost/done.php", function( data ) {
var items = [];
$.each( data, function( key, val ) {
var currentValue = $("#done").text();
if(val !== currentValue){
$("#counter").html("<b>"+val+"</b>").css({"color" : "black"}).hide().fadeIn("slow");
}
setTimeout(function(){repeatJSON()},2000);
});
});
}
如果我在 $.post 中执行上述重复函数,它将不起作用,我将不再从“Work.php”得到响应,尽管脚本在后台继续工作。
是否有可能进行两次多次通话?一个持续工作,另一个持续更新?
【问题讨论】:
-
您需要记住 AJAX 中的第一个“A”是“异步”。您可能需要重新考虑您的逻辑以使其按您的意愿运行。
-
听起来你可以从使用会话来解决这个问题中受益。我之前也遇到过类似的问题。基本上,您长时间运行的脚本将更新一些会话变量(在循环中),然后编写它所拥有的内容并关闭/打开会话。您的“进度”脚本将简单地访问您的会话并从中收集信息并将其发送回您的 AJAX 请求。虽然与您的目的不完全相关see this post 我的意思的一个例子。