【发布时间】:2020-04-24 20:52:48
【问题描述】:
我运行一个名为 hookUser 的函数每 2 秒查询一次数据库以检查用户是否在线,但它会引发此错误:
cannot read innerHTML of undefined
我怀疑是因为异步回调不在同一范围内?
问题是我无法将按钮对象传递给该回调,我可以这样做吗?如果没有,还有其他方法可以使这项工作吗?
感谢任何帮助。
<script>
function hookUser(user)
{
console.log('HOOKED USER: '+user);
setInterval(
function(user)
{
var ajaxurl = 'checkonline.php',
data = {'username':user};
$.post(ajaxurl, data, function (response) {
var button = document.getElementById('button_'+user);
if(response){
console.log(user+'ONLINE');
//button.innerHTML = 'ONLINE';
//button.className = 'btn btn-xs btn-success';
}else{
console.log(user+'ONLINE');
//button.innerHTML = 'OFFLINE';
//button.className = 'btn btn-xs btn-danger';
}
});
},2000);
}
</script>
...
<div class="col-md-3">
<div class="col-md-12 thumb-user " >
<div>
<button id='button_<?php echo $current_user;?>' class='btn btn-xs btn-success' >Unknown</button>
<?php echo '<script>hookUser(\''.$current_user.'\');</script>';?>
...
【问题讨论】:
-
将按钮的引用作为函数的参数传递。
-
你怎么能这样做呢,ajax回调不是有固定参数吗?即只是响应。
-
在 hookUser(user, add this -> btn) 中传递它正在调用的用户以及它将影响的按钮。
-
看起来您已经在访问该按钮,但您只是在 ajax 调用中拥有它。只需将它移到 上方
$.ajax()行
标签: javascript html