2013-01-14 78 views
0

我需要輪詢webservice 每小時一次以檢查新消息。我想用jQuery來做。 Ajax調用會是這樣的:使用jQuery輪詢到web服務

function checkForMessages(rowid) { 
$.ajax({ 
    type: "POST", 
    url: "MyPage.aspx/CheckForMessages", 
    contentType: "application/json; charset=utf-8", 
    data: "{'currentMessages': '" + cMessages+ "'}", 
    dataType: "json", 
    success: function (msg) { 

    }, 
    error: function (response) { 

    } 
}); 
} 

url: "MyPage.aspx/CheckForMessages"實際上是一個PageMethod的,而不是Webservice的。

我不明白的是如何使「循環」與jQuery是等待一個小時來調用上面的函數。

那麼我怎樣才能讓這個函數調用的代碼只有每小時一次

+0

您期待有人讓網站保持打開狀態,並且不會超過1小時? –

+0

@RoryMcCrossan,dunno。也許它是用於儀表板之類的。 –

回答

0

可以使用setTimeout功能,以達到預期的效果:

function checkForMessages(rowid) { 
    $.ajax({ 
     type: "POST", 
     url: "MyPage.aspx/CheckForMessages", 
     contentType: "application/json; charset=utf-8", 
     data: "{'currentMessages': '" + cMessages+ "'}", 
     dataType: "json", 
     success: function (msg) { 
      ... 
     }, 
     error: function (response) { 
      ... 
     }, 
     complete: function() { 
      ... 
      setTimeout(function() { checkForMessages(rowid); }, 3600000); 
     } 
    }); 
} 

這樣,當你調用函數第一時間和您$.ajax通話結束後(不管是成功還是錯誤),它會計劃在一小時後再次執行該功能(但請記住,在網絡世界中,一小時是很多時間,授權可能會過期等)。

+0

使用setTimeout的優點是什麼,然後在使用setInterval之後再次添加它?後者更清潔國際海事組織 – Steve

+0

@Steve差異是非常微妙的,你可以在這裏閱讀更多關於他們:http://stackoverflow.com/questions/729921/settimeout-or-setinterval。在這種情況下,它們並不相關,但setTimeout總是對我更可靠,因此它總是我的第一選擇。 – tpeczek

+0

@Archer修復參數傳遞。 – tpeczek

0
window.setIntervall(function, delay); 

以毫秒爲單位的延遲。

但是,使用此方法時,網站必須始終打開。你可以使用服務器發送的事件從服務器到您的網站推送的消息,但是這需要大量的工作..

+0

我更喜歡投票而不是推動目前。 – anmarti

0

窗口。 setInterval是最好的方法,顯然如果網頁仍然打開,它只會在一小時後進行輪詢。

$(function() { 
    setInterval(myPollingMethod, 3600000); 
}); 

function myPollingMethod() 
{ 
    //this will repeat every 1 hour (3600 seconds) 
} 

如果您想停止輪詢,請不要忘記調用window.clearInterval方法。

0
function checkForMessages(rowid) { 
$.ajax({ 
    type: "POST", 
    url: "MyPage.aspx/CheckForMessages", 
    contentType: "application/json; charset=utf-8", 
    data: "{'currentMessages': '" + cMessages+ "'}", 
    dataType: "json", 
    success: function (msg) { 
     //do stuff here 
     setTimeout(function(rowid) {checkForMessages(rowid);},3600000); 
    }, 
    error: function (response) { 

    } 
}); 
} 
+0

這將立即運行函數checkForMessages。 – Archer

+0

好的。謝謝。 –