如何让ajax在不使用jquery而使用javascript的情况下每(n)秒更新一次?
我正在尝试每隔(n)秒对服务器进行一次javascript轮询。我如何使用javascript进行轮询?假设您使用jQuery:如何让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(
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)&&(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
秒(可能发生)时出现意外行为。