2012-07-05 67 views
4

可能重複:
jQuery Ajax request every 30 seconds如何加載頁面的一部分,每30秒

我知道我們可以在一些事件加載頁面的一部分。我也知道我們可以每隔指定時間加載整個網頁。但我想知道如何每30秒加載一頁的一部分。

+1

如果您使用AJAX,則可以使用'setInterval()'函數調用AJAX方法。 https://developer.mozilla.org/En/Window.setInterval – antyrat 2012-07-05 10:15:43

+0

@antyrat使用'setInterval'和AJAX是一個非常糟糕的主意。 – 2012-07-05 10:18:14

+0

@FlorianMargaine,這有什麼好主意? – 2012-07-05 10:18:46

回答

12
function refreshPage() { 
    $.ajax({ 
     url: 'ajax/test.html', 
     dataType: 'html', 
     success: function(data) { 
      $('.result').html(data); 
     }, 
     complete: function() { 
      window.setTimeout(refreshPage, 30000); 
     } 
    }); 
} 

window.setTimeout(refreshPage, 30000); 

使用setTimeout的優點是,如果連接掛起一段時間,你不會得到噸掛起的請求,因爲前一個結束後一個新的纔會被髮送。

+0

夥計沒有必要setTimeout第二次 – 2012-07-05 10:24:43

+0

感謝ThiefMaster。 – 2012-07-05 10:26:07

+3

@Random當然有。否則,您立即重新啓動下一個ajax調用。 – 2012-07-05 10:26:28

2
function load_content(){ 

    setTimeout(function(){ 

     $.ajax({ 
      url: 'ajax/example.html', 
      dataType: 'html', 
      success: function(data) { 
       $('.result').html(data); 
       load_content(); 
      } 
     });dataType: 'html', 

    },30000); 

} 

load_content(); 
+3

在AJAX中使用'setInterval'是一個非常糟糕的主意。 – 2012-07-05 10:18:32

+0

@FlorianMargaine你會怎麼做呢? – 472084 2012-07-05 10:19:24

+1

'setTimeout'並在前一個請求成功或失敗後(即在'complete'回調中)創建一個新的超時時間(例如在'complete'回調中) – ThiefMaster 2012-07-05 10:19:37

-2

如果您正在使用jQuery你可以使用load()方法

setInterval(function(){ 

    $('#some-kinda-container').load('/some/kinda/url.html #bit-you-need'); 

}, 30000); 
+0

查看@ Jleagle的答案'的評論,看看爲什麼使用'setInterval'是一個非常糟糕的主意。 – 2012-07-05 10:21:56

+0

如果你的ajax調用沒有在30秒內完成,你有更大的擔心比setInterval – 2012-07-05 10:23:03

+0

它第一次不是約30秒,它是關於保持不變。如果你需要2秒才能得到迴應,你會在5分鐘左右重疊你的請求(沒有計算,但你明白了) – 2012-07-05 10:25:53

-1
$(function() { 
    setInterval(function() { 
    getData(); // call to function 
    }, 30000); // 30 seconds 
}); 


// define your function here 
function getData() { 
    var url ="/mypage.php?type=load_data"; 
    var httpobj = $.ajax({url:url,async:false}); // send request 
    var response = httpobj.responseText.trim(); //get response 
    $('#myDiv').html(response); // display data 
} 
+1

閱讀所有其他答案的評論。認真。 – 2012-07-05 10:40:16

0

jQuery有已經在功能上構建一個遠程文件來替換一個元素的內容,稱爲load()。隨着load()您可以使用此oneliner:

window.setTimeout($('#refresh').load('/remote/content.html'), 30000); 

#refresh是刷新元素的ID,/remote/content.html是遠程的內容。