使用Jquery、AJAX、PHP和数组实现实时更新

3

所以,我正在尝试学习使用数组在单个函数中执行和更新不同元素的Jquery/AJAX。

下面,我正在尝试更新DIV,显示登录到网站的人数和流通货币的总量。脚本将每隔几秒钟更新一次。

有人能帮我纠正语法或者至少告诉我这里做错了什么吗?

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="../jquery.js"></script>

<script type="text/javascript">
function updateStats(stat)
{
    var stat = ["online","money"];

    var url = "online.php";

    $.each(stat,function(){

    $.post(url,{stat: stat} , function(data) {

        $("#" + this).html(data);       
    })

    })  
} 

setInterval('updateStats("updateStats")', 2000);
</script>


<body onLoad="updateStats(stats);">

<div id="online"></div>
<div id="money"></div>
</body>
</html>

<?php

if($_POST['stats']=='online')
{
    $result= $mysqli->query("SELECT loggedin FROM accounts WHERE loggedin !=0");
    echo $result->num_rows; 
} 

elseif($_POST['stats'] == 'money')
{
$result = $mysqli->query("SELECT sum(money) AS totalMoney FROM users");
$getData = $result->fetch_assoc();

echo number_format($getData['totalMoney']);

}

$mysqli->close();

?>

1
$_POST ['stats'] / {stat:stat} stats!= stat - Rory McCrossan
它目前没有做什么,或者它有什么问题? - Kevin B
2个回答

2

您的代码应该像这样:

function updateStats(stat)
{
    var stat = ["online","money"];
    var url = "online.php";

    $.each(stat, function(i, key){
       $.post(url, {stats: key}, function(data) {
          $("#" + key).html(data);       
       });
    });
} 

请注意stats参数是复数形式。

你会接受这个作为你的答案吗?请在您左侧的检查中确认。 - Garis M Suero

1
这里:
$("#" + this).html(data); 

this 在那种情况下指的是与您预期不同的 this。请尝试使用以下代码:

$.each(stat,function(i,str){
    $.post(url,{stats: str} , function(data) {
        $("#" + str).html(data);       
    });
});

更新 根据Rory的评论修正了参数名称。


这会向服务器触发N个POST请求,因为你将其嵌入了一个循环中。你应该发送一个请求到服务器,传递stat数组。 - Atticus
在理想情况下是可以的,但有时候服务可能无法接受数组,而你又无法更改该服务。 - Kevin B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接