如何使ajax每(n)秒更新一次,而无需使用jquery而是使用javascript?

How make ajax update every (n) number of seconds with out using jquery but using javascript?

提问人:Aaron 提问时间:5/2/2011 更新时间:11/21/2013 访问量:4410

问:

我正在尝试每 (n) 秒对服务器进行一次 javascript 轮询,我将如何使用 javascript 做到这一点?

JavaScript 阿贾克斯

评论

0赞 Felix Kling 5/2/2011
你想知道什么?你似乎已经知道你必须使用Ajax,所以我想你已经熟悉了它。你试过了什么?你被困在哪里?

答:

5赞 Naftali 5/2/2011 #1

假设您使用的是 jQuery:

var seconds = 5;

setInterval(function(){
    $.ajax({
        url: 'something.something',
        data: 'something'
    });
}, seconds * 1000)

没有jQuery:

var seconds = 5;

setInterval(function(){
    some_ajax_function();
}, seconds * 1000)

或者正如下面@Felix建议的那样:

var seconds = 5;
some_ajax_function(seconds);

function some_ajax_function(seconds){
     ..ajax
     onsuccess: setTimeout(function(){some_ajax_function(seconds);}, 
                      seconds * 1000)
}

评论

0赞 Naftali 5/2/2011
做同样的事情,但在函数中使用您的非 jQuery ajax 方法setInterval
0赞 Felix Kling 5/2/2011
这不是一个好主意。应在前一个请求完成时启动一个新请求,以避免在一个请求花费超过几秒钟(可能发生)的情况下出现意外行为。n
2赞 Oliver M Grech 5/2/2011 #2

它很简单,具有以下功能

window.setInterval(“yourfunctionWithAjaxRequestETC”, time_in_ms);});

享受:)

评论

0赞 Felix Kling 5/2/2011
这不是一个好主意。应在前一个请求完成时启动一个新请求,以避免在一个请求花费超过几秒钟(可能发生)的情况下出现意外行为。n
1赞 bigblind 5/2/2011 #3

首先,我们需要创建我们的 Ajax 请求对象。我们需要考虑不同的浏览器。

var xmlhttp;
if (window.XMLHttpRequest)
  {
  // code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
}
else
  {
   // code for IE6, IE5
   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

现在,我们将编写函数来发送请求

function askData(){
   xmlhttp.open("GET","myinfosource.php",true);  // opens a Get request to the url myinfosource.php, and sets the request to asynchronuous.
   xmlhttp.send(); //sends the request
}

现在,让我们编写一个事件处理程序,在信息返回时更改 HTML。

xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200) //if we reveived data (readystate 4 means that information was received. status 200 is the status of the HTTP request, where 200 means 'ok'.
    {
    //insert data into the div you want.
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
  }

}

最后,我们在编写的第一个函数上设置了一个间隔,使其每 x 秒运行一次。

setInterval('askData',10000);

这将刷新您的数据。

我希望你现在明白为什么大多数人使用像jquery这样的框架来使用AJAX。js 框架的主要优点之一是它们可以解决浏览器不兼容的问题,以便您作为开发人员可以专注于手头的任务。

0赞 AVA 9/12/2013 #4

我假设在 web.xml 中配置了一个具有 URL 模式 /UpdateCount 的 servlet 以提供动态数据/内容,并且在 jsp 页面中有一个 div 元素 countStatDiv

以下代码使用 GET 方法每 30 秒刷新/更新一次 countStatDiv 的内容,可变值可根据需要进行更改:

                <script>
                    var request;
                    var seconds=30;
                    function getRequestObject(){
                    setInterval(function() {sendRequest();},seconds*1000);
                    if (window.ActiveXObject){
                    return (new ActiveXObject("Microsoft.XMLHTTP"));
                    } else if (window.XMLHttpRequest){
                    return(new XMLHttpRequest());
                    } else {
                    return (null);
                    }
                    }
                    function sendRequest(){
                    request = getRequestObject();
                    request.onreadystatechange = handleResponse;
                    request.open("GET", "../UpdateCount", true);
                    request.send(null);
                    }
                    function handleResponse(){
                    if((request.readyState == 4)&amp;&amp;(request.status == 200)){
                    var serverResponse = request.responseText;
                    var statCtrl=document.getElementById("countStatDiv");
                    statCtrl.innerHTML=serverResponse;
                    }
                    }
                </script>