[英]Call javascript function after specific time intervals
我正在為JavaScript編寫代碼。其中我試圖使用AJAX檢查遠程asp.net頁面(aspx)連接。但是我想檢查一下條件,這個調用將繼續2分鍾而且持續10秒間隔。 不是那樣,而是像我想的邏輯那樣,如果seconds = 120,如果秒<120 setInterval(“GetFeed()”,2000);
任何人都可以幫助我。
這是我的連接檢查代碼,
var learnerUniqueID1;
var flag='true';
function fnCheckConnectivity(coursId)
{
//here will the remote page url
var url = 'http://<%=System.Web.HttpContext.Current.Request.UrlReferrer.Host+System.Web.HttpContext.Current.Request.ApplicationPath%>/TestConn.aspx';
//alert(url);
if (window.XMLHttpRequest) {
learnerUniqueID1 = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
learnerUniqueID1 = new ActiveXObject("Microsoft.XMLHTTP");
}
else
{
alert("Your browser does not support XMLHTTP!");
}
learnerUniqueID1.open("POST", url, true);
learnerUniqueID1.onreadystatechange = callbackZone;
learnerUniqueID1.send(null);
}
function callbackZone()
{
if (learnerUniqueID1.readyState == 4)
{
if (learnerUniqueID1.status == 200)
{
//update the HTML DOM based on whether or not message is valid
parseMessageZone();
}
else
{
flag='false';
alert('We have detected a break in your web connection, \n please login again to continue with your session');
}
}
}
function parseMessageZone()
{
var result = learnerUniqueID1.responseText;
}
function makePayment(obj)
{
try
{
var Id = obj.attributes["rel"].value
//alert(Id);
var res=confirm('Want to Continue.');
if(res == true)
{
startRequest(Id);
//return true;
}
else
{
return false;
}
}
catch(Error)
{
}
}
function startRequest(Id)
{
var milliseconds = 10000;
currentDate = new Date();
// start request
pollRequest(milliseconds, false, currentDate, 120000,Id);
}
function pollRequest(milliseconds, finshed, date, timeout,Id)
{
if((new Date()).getTime() > date.getTime()+timeout)
{
// 2-minute timeout passed
return;
}
if(!finished){
setTimeout(function(){
if(//check backend to see if finished) //which method will go here
{
fnCheckConnectivity(coursId);
pollRequest(milliseconds, true, date, timeout,Id);
}
else{
pollRequest(milliseconds, false, date, timeout,Id)
}
}, milliseconds);
return;
}
// when code reaches here, request has finished
}
我不確定我是否理解正確,但是如果你試圖輪詢你每10秒做一次請求的狀態,為什么不嘗試這樣的事情呢?
function startRequest(){
var milliseconds = 10000;
currentDate = new Date();
timeout = 120000;
// start request
pollRequest(milliseconds, false, currentDate, timeout);
}
function pollRequest(milliseconds, finshed, date, timeout){
if((new Date()).getTime() > date.getTime()+timeout){
// 2-minute timeout passed
return;
}
if(!finished){
setTimeout(function(){
if(//check backend to see if finished){
pollRequest(milliseconds, true, date, timeout);
}
else{
pollRequest(milliseconds, false, date, timeout)
}
}, milliseconds);
return;
}
// when code reaches here, request has finished
}
請注意這是一個遞歸函數,瀏覽器有一個遞歸限制。 此外,關於2分鍾超時,您可以將超時設置為ajax預過濾器,或者添加在每次遞歸時添加的變量。
如果我理解正確,每10秒鍾要做2分鍾的任務。
var interval = setInterval(function(){
// do stuff
},10000); // execute every 10 seconds
setTimeout(function(){
clearInterval(interval);
},120000); // Remove interval after 2 minutes
您不希望腳本在服務器/客戶端上連續運行。 你應該查找linux的chronjob或windows的調度程序。
我沒有給你一個合適的解決方案,只是另一種選擇。 但是,對於您似乎想要做的事情,這似乎是正確的工具。
您應該使用拉取請求,而不是您正在描述的推送請求,其中客戶端用戶等待一定的時間然后發出請求。
為此,您可以對服務器進行AJAX調用,然后服務器可以等待(並且可能在等待時執行其他操作),然后在數據准備好后向用戶返回一些內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.