2012-07-05 69 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是远程的内容。