2014-01-30 134 views
0

我們有一個Ajax系統設置使用Chrome瀏覽器來檢查不同的事件中未讀郵件:如何設定的時間間隔添加到查詢腳本

var JHR = function (method, url, data, fun) { 
    var xhr = new XMLHttpRequest(); 
    xhr.responseJSON = null; 

    // xhr.open('POST', url); 
    xhr.open(method, url, true); 
    xhr.setRequestHeader("Authorization", "Basic " + data.userAuth); 
    xhr.setRequestHeader('Content-Type', 'application/json'); 

    xhr.addEventListener('load', function() { 
    //my old man once told me "Zirak, sometimes, you must face the dangers 
    // of life head on". he then threw me in a shark tank. but I'm sure it 
    // applies here too. 
    //...I was only 7 
    xhr.responseJSON = JSON.parse(xhr.responseText); 

    if (fun) fun(xhr.responseJSON, xhr); 
    }); 

    xhr.send(JSON.stringify(data)); 

    return xhr; 
}; 


var pollInterval = 1*60*60; // 60 min 
var timerId; 

function startRequest() { 
    updateBadge(); 
    timerId = window.setTimeout(startRequest, pollInterval); 
} 
function stopRequest() { 
    window.clearTimeout(timerId); 
} 

function getUnreadCount(onSuccess, onError) { 
    chrome.storage.sync.get("userAuth", function(data) { 
    var response = JHR("GET", "https://api.rss.com/v2/unread_entries.json", {userAuth: data.userAuth}); 
    console.log(response); 
    }); 
} 

function updateBadge() { 
    // Callbacks for onSuccess, and onError 
    getUnreadCount(function(data) { 
     chrome.browserAction.setBadgeText({text:data.unreadItems}); 
    }, function(data){ 
     chrome.browserAction.setBadgeText({text:'error'}); 
    }); 
} 

我們想設置一個變量的時間間隔(每5例如分鐘),並且每5分鐘發送一次ajax呼叫或者將變量設置爲任何值。

有人可以幫助我們確定在哪裏添加此行爲?我認爲pollInterval會處理它,但事實並非如此。

+0

爲什麼不將'window.setTimeout'更改爲'windows.setInterval'(還有clearInterval)? – MarcusVinicius

+0

謝謝你的建議,clearInterval如何工作? – tmartin314

+0

'setTimeout'和'setInterval'具有相同的簽名,您只需更改代碼中的函數名稱即可。 – MarcusVinicius

回答

1

我會爲xhr對象添加一個onreadystatechange函數,以便在完成後再次調用該函數。裏面你JHR聲明:

xhr.onreadystatechange = function() { 
    if(xhr.readyState == 4) { 
    timerId && clearTimeout(timerId); 
    timerId = setTimeout(startRequest, pollInterval); 
    } 
} 

如果你使用的setInterval,而不是你應該解僱另一個之前檢查完成之前的XHR對象(通過其readyState屬性)。

0

試着改變你的代碼中使用clearInterval

var pollInterval = 1*60*60; // 60 min 
var timerId; 

function startRequest() { 
    updateBadge(); 
    timerId = window.setInterval(startRequest, pollInterval); 
} 

function stopRequest() { 
    window.clearInterval(timerId); 
} 

更多setInterval

http://www.w3schools.com/jsref/met_win_clearinterval.asp

https://developer.mozilla.org/en-US/docs/Web/API/Window.clearInterval

setInterval and how to use clearInterval

+0

謝謝,我不認爲stopRequest被稱爲任何地方。你推薦我從哪裏來的? – tmartin314