现在的情况是:
我有一个按钮,单击该按钮会将其ID发送到php页面,然后清理表并在该列上附加一个新表。
我现在面临的问题是,我想在单击按钮后每30秒自动更新一次表格,但是我自己不想再次手动单击它。我尝试了setTimeOut,但是它停止显示表,而不是每个时间间隔都更新它。
我的HTML按钮:
<button type="button" onclick="ETArequest(this) " id="d1stop" class="list-group-item" style="text-align:center; height:30px; font-size:15px;"></button>
我的JavaScript:
function ETArequest(button) {
if (button == "") {
$('#ETAcol').empty();
return;
} else {
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else {
// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
$('#ETAcol').empty();
$('#ETAcol').append(xmlhttp.responseText);
}
};
xmlhttp.open("GET","getTime.php?q="+(button.id),true);
xmlhttp.send();
}}
参考方案
这取决于您如何设置超时。重复函数调用的最佳方法是:
var
delay = 30000,
f = function() {
ETArequest($('button'));
setTimeout(f, delay);
};
setTimeout(f, delay);
这样,您仅在功能完成后才开始新的等待。
但是,在您的情况下-发送异步请求时,应在请求完成后开始超时:
var
delay = 30000,
f = function() {
ETArequest($('button'), f, delay);
};
setTimeout(f, delay);
function ETArequest(button, callback, delay) {
//... YOUR CODE
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
$('#ETAcol').empty();
$('#ETAcol').append(xmlhttp.responseText);
setTimeout(callback, delay);
}
}
}
同样不要忘记您必须正确设置函数的作用域和参数!
如果使用jQuery发送AJAX,则可以这样使用:
var
delay = 30000,
f = function() {
ETArequest($('button')).always(function() { setTimeout(f, delay); });
};
setTimeout(f, delay);
function ETArequest(button, callback, delay) {
//... YOUR CODE
return $.ajax(url, options);
}
函数ajax返回一个promise-如果将函数传递到其always方法中,则它将在ajax完成后被调用。有关详细信息,请参见jQuery.ajax()。
要启动和停止自动更新:
function autoupdate() {
var
delay = 30000,
f = function() {
ETArequest($('button'), f, delay);
};
if (!window.autoupdate) {
window.autoupdate = setTimeout(f, delay);
$('button').text('Stop');
}
else {
clearTimeout(window.autoupdate);
window.autoupdate = false;
$('button').text('Update');
}
}
在XHR响应中:
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
$('#ETAcol').empty();
$('#ETAcol').append(xmlhttp.responseText);
if (false !== window.autoupdate) {
setTimeout(callback, delay);
}
}
}
该按钮将同时作为开始和停止:
<button id=start onclick="autoupdate();">Update</button>
说明:单击“停止”按钮时,您需要清除超时,但也要记住,如果您在浏览器等待响应(并且没有运行计时器)的情况下单击“停止”,则自动更新已停止,因此不启动新的更新。 。
如果我得到url(''),我该如何使用另一个URL - javascript我是新手,正在写这篇文章,但是如果源上没有图像,那么我只有空白。有人可以告诉我,如果我正在获取背景图像,如何获取/images/no-image.jpg:url();这是我的代码:<div class="uk-clearfix uk-position-relative"> <div class="recipeb…
如何在没有for循环的情况下在Javascript中使用Django模板标签 - javascript我想在JavaScript中使用模板变量:我的问题是在javascript代码中使用for循环,for循环之间的所有事情都会重复..但我不想要....下面粘贴了我的代码..有人可以告诉我更好的方法吗这..因为这看起来很丑..这是我的代码: {% block extra_javascript %} <script src="/static/js…
使用JS和PHP更改弹出窗口背景图像 - javascript我有一个JS函数:function zoom(now) { document.getElementById("popup").style.display = "block"; document.getElementById("photos").style.backgroundImage = …
打印二维阵列 - javascript我正在尝试打印子元素。在this example之后。怎么做?。$myarray = array("DO"=>array('IDEAS','BRANDS','CREATIVE','CAMPAIGNS'), "JOCKEY"=>a…
获取JavaScript值到C#字符串 - javascript是否可以在C#中执行类似的操作?该值为“ 10/05/2014”string jsValue = javascript("$('#EstimatedStartDate').val()"); 参考方案 您能否更详细地阐明您要做什么。看来您正在尝试从javascript(客户…