【发布时间】:2011-10-07 07:48:56
【问题描述】:
我正在编写这个脚本,以便它显示导入脚本的状态。它应该调用一个函数,每 X 秒运行一次 http 请求。
function progres_import() {
//if(import_status != 'finalizat') {
alert("progres_import");
setTimeout(function() { return update_progres_import(); }, 2000);
setTimeout(function() { return update_progres_import(); }, 4000);
setTimeout(function() { return update_progres_import(); }, 6000);
setTimeout(function() { return update_progres_import(); }, 8000);
//setTimeout(function() { progres_import(); }, 400);
//}
//else {
//}
}
这是我用来测试功能的。我把 cmets 也放进去只是为了展示我最终打算用它做什么。我尝试了所有可能的 setTimeout 调用,带引号、不带引号、带匿名函数和不带匿名函数。
var xmlhttp_import_progres;
function update_progres_import() {
xmlhttp_import_progres=GetXMLHttpObject();
if (xmlhttp_import_progres==null) {
alert ("Browser does not support HTTP Request (xmlhttp_import_progres)");
return;
}
var url="crm/ferestre/import_progres.php";
url=url+"?sid="+Math.random();
xmlhttp_import_progres.onreadystatechange=function() {
if (xmlhttp_import_progres.readyState == 4) {
progres_resp = xmlhttp_import_progres.responseText;
progres = progres_resp.split('_');
import_nrc = progres[0];
import_nrt = progres[1];
import_status = progres[2];
mesaj = 'Progres import: ' + import_nrc + ' / ' + import_nrt;
//document.getElementById("corp_import_mesaj").innerHTML = mesaj;
alert(progres_resp);
}
};
xmlhttp_import_progres.open("POST",url,true);
xmlhttp_import_progres.send(null);
}
这是 progres_import 函数的业务端。
发生的情况是我在导入过程开始时在第一个函数中获得了警报(“progress_import”),但第二个函数中的警报(progres_resp)仅在导入过程结束后才开始弹出(它仍然保持2 秒的间隔,所以从这个意义上说 setTimeouts 有效)。
ajax 请求中的 php 脚本只获取导入脚本设置的一些会话变量并打印出来以供 javascript 使用(x 导入 y 总计,z 失败,诸如此类)
知道为什么会这样吗?
【问题讨论】:
-
能完整展示一下功能吗:
update_progres_import? -
我的第一个想法是,服务器端,php脚本不能同时运行,如果是这样,那我们就完蛋了。
-
你也能显示变量
xmlhttp_import_progres吗? -
我猜你的问题是什么。但是您需要显示更多详细信息。
-
@vietean 刚刚粘贴了整个函数。
标签: javascript ajax settimeout