Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让ajax在不使用jquery而使用javascript的情况下每(n)秒更新一次?_Javascript_Ajax - Fatal编程技术网

如何让ajax在不使用jquery而使用javascript的情况下每(n)秒更新一次?

如何让ajax在不使用jquery而使用javascript的情况下每(n)秒更新一次?,javascript,ajax,Javascript,Ajax,我正在尝试每隔(n)秒对服务器进行一次javascript轮询。我如何使用javascript进行轮询?假设您使用jQuery: var seconds = 5; setInterval(function(){ $.ajax({ url: 'something.something', data: 'something' }); }, seconds * 1000) 没有jQuery: var seconds = 5; setInterval(

我正在尝试每隔(n)秒对服务器进行一次javascript轮询。我如何使用javascript进行轮询?

假设您使用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)
}

它很简单,具有以下功能

setInterval(“yourfunctionWithAjaxRequestETC”,时间单位为毫秒)


享受:)

首先,我们需要创建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框架的一个主要优点是,它们解决了浏览器不兼容的问题,因此,开发人员可以专注于手头的任务。

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

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

                <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>

var请求;
var秒=30;
函数getRequestObject(){
setInterval(函数(){sendRequest();},秒*1000);
if(window.ActiveXObject){
返回(新的ActiveXObject(“Microsoft.XMLHTTP”);
}else if(window.XMLHttpRequest){
返回(新的XMLHttpRequest());
}否则{
返回(空);
}
}
函数sendRequest(){
request=getRequestObject();
request.onreadystatechange=handleResponse;
打开(“获取”、“./UpdateCount”,true);
请求发送(空);
}
函数handleResponse(){
if((request.readyState==4)和(request.status==200)){
var serverResponse=request.responseText;
var statCtrl=document.getElementById(“countStatDiv”);
statCtrl.innerHTML=serverResponse;
}
}

您想知道什么?您似乎已经知道必须使用Ajax,所以我想您已经熟悉了它。你试过什么?你被困在哪里了?做同样的事情,但是在
setInterval
函数中使用非jQuery ajax方法不是一个好主意。新请求应该在前一个请求完成时启动,以避免在一个请求花费的时间超过
n
秒(可能发生)时出现意外行为。这不是一个好主意。新请求应在前一个请求完成时启动,以避免在一个请求花费的时间超过
n
秒(可能发生)时出现意外行为。