我有两个.asp脚本 - 第一个将sys.tables和sys.views的内容复制到SQL中的另一个表中。第二个脚本计算完成百分比
(来自newtable的count()/(来自sys.tables的count()+来自sys.views的count(*)))* 100
我有一个函数来调用第一个脚本。
function importTablesAndViews()
{
xmlhttpImportTablesAndViews=GetXmlHttpObject();
if (xmlhttpImportTablesAndViews==null)
{
alert ("Your browser does not support XMLHTTP!");
return;
}
url="importtablesandviews.asp";
url=url+"?sid="+Math.random();
xmlhttpImportTablesAndViews.onreadystatechange=function(){if (xmlhttpImportTablesAndViews.readyState==4){
var aspResponse = xmlhttpImportTablesAndViews.responseText;
alert(aspResponse); }}
xmlhttpImportTablesAndViews.open("GET",url,true);
xmlhttpImportTablesAndViews.send(null);
}
我有另一个函数来调用进度脚本
function refreshImportProgress()
{
//alert('Refresh...');
xmlhttpRefreshImportProgress=GetXmlHttpObject();
if (xmlhttpRefreshImportProgress==null)
{
alert ("Your browser does not support XMLHTTP!");
return;
}
url="importtablesandviewsprogress.asp";
url=url+"?sid="+Math.random();
xmlhttpRefreshImportProgress.onreadystatechange=function(){if (xmlhttpRefreshImportProgress.readyState==4){
var aspResponse = xmlhttpRefreshImportProgress.responseText; document.getElementById('progressDiv').innerHTML = aspResponse; }}
xmlhttpRefreshImportProgress.open("GET",url,true);
xmlhttpRefreshImportProgress.send(null);
}
我想要做的是在importTablesAndViews()函数内以3秒的间隔调用refreshImportProgress()函数。
这可能吗?我曾尝试用谷歌搜索同时的ajax请求,但到目前为止还没有多少运气。
答案 0 :(得分:0)
在setTimeout
的{{1}}处理程序中启用refreshImportProgress
的计时器(onreadystatechange
)(只要进度低于100%):
xmlhttpRefreshImportProgress
在function refreshImportProgress() {
// ...
xmlhttpRefreshImportProgress.onreadystatechange = function () {
if (xmlhttpRefreshImportProgress.readyState == 4) {
document.getElementById('progressDiv').innerHTML = xmlhttpRefreshImportProgress.responseText;
var progress = parseInt(xmlhttpRefreshImportProgress.responseText, 10);
// ↑ this assumes the value of responseText is a integer only or a integer with a percentage symbol (44%)
if (progress < 100) {
setTimeout(refreshImportProgress, 3000);
}
}
}
// ...
}
中,只需在发送请求后致电importTablesAndViews()
:
refreshImportProgress
答案 1 :(得分:0)
如果我误解了这个问题,请道歉。 但我不确定在3秒计时器上与Ajax有什么关系是最好的方法。例如,如果您的浏览器速度非常慢,则无法保证第一种方法的更改能够及时完成。此外,快速浏览器也需要等待3秒钟。
如果你必须这样做,那么只需调用setTimeout() http://www.w3schools.com/jsref/met_win_settimeout.asp
您似乎更有可能实施一个在需要时间的问题得到解决时调用的承诺。 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise
甚至是一个事件监听器。这是一份清单。 http://www.w3schools.com/jsref/dom_obj_event.asp
除非你只想延迟异步直到下一次打勾,否则我真的不需要使用超时。