定期AJAX调用不会更新我的服务器状态

时间:2017-01-15 19:36:54

标签: javascript php jquery ajax

我的代码出了问题。 AJAX调用在进入页面和刷新后从JSON数组获取信息并在我的HTML代码中根据需要放置,但问题是,在set循环(30s)中没有这样做。这是我的代码:

JavaScript的:

$(function status_ts3(){
    $.ajax({
            url : '/lib/ts3_stats.php',
            type : 'POST',
            dataType : 'json',
            success : function (response) {
                $('#ts3-status').replaceWith(response['server_status']);
                $('#ts3-number-online').replaceWith(response['online_number']);
            },
            error : function() {
               $('#ts3-status').replaceWith('<span class="server-offline">Offline</span>');
               $('#ts3-number-online').replaceWith('<span class="online-number-ts3">0/0</span>');
            },
            complete: function() {
              setTimeout(status_ts3, 30000);
            }   
    })});

PHP:

$ts3 = TeamSpeak3::factory("serverquery://@xxx/?server_port=xxx");
$status = $ts3->getProperty("virtualserver_status");
$count = $ts3->getProperty("virtualserver_clientsonline") - $ts3->getProperty("virtualserver_queryclientsonline");
$max = $ts3->getProperty("virtualserver_maxclients");
$servers_ts3='<span class="server-online">' . ucfirst($status) .'</span>';
$online_number_ts3 = '<span class="online-number-ts3">' . $count . '/' . $max . '</span>';
$ajax = array(
    'server_status' => $servers_ts3,
    'online_number' => $online_number_ts3,
);
echo json_encode($ajax);

所以问题是,为什么它不起作用?我错过了什么或被误解了吗?我是半新手所以我不知道,非常感谢所有的帮助。

1 个答案:

答案 0 :(得分:0)

如果我理解正确(我在标题中注意到“Periodic”一词)你想每30秒调用一次这个AJAX调用。如果是这样,您需要使用setInterval而不是setTimeout作为:

  

setTimeout(函数,毫秒)   在等待指定的毫秒数后执行一个函数。

     

setInterval(function,milliseconds)   与setTimeout()相同,但是连续重复执行该函数。

http://www.w3schools.com/js/js_timing.asp

如果是这种情况,您应首先设置轮询,然后定义调用AJAX的函数:

setInterval(status_ts3, 30000);

$(function status_ts3(){
  $.ajax({
    ...
  })
});

并删除complete回调表单AJAX处理函数。