2012-04-17 40 views
3

所以,我试图学习使用数组来执行和更新单个函数内不同元素上的代码的Jquery/AJAX。用jquery,AJAX,PHP和数组实时更新

下面,我试图用登录到网站的人数以及流通中的总货币来更新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 – 2012-04-17 19:11:07

+0

目前没有做什么或者没有做什么工作? – 2012-04-17 19:11:23

回答

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参数。

+0

就是这样!非常感谢。 – prosportal 2012-04-17 19:37:30

+0

你会接受这个作为你的答案吗?在你的左边检查。 – 2012-04-17 19:55:27

1

这里:

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

this在这种情况下指的是不同的this比你期待什么。试试这个:

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

更新固定PARAM名称按Rory的评论。

+0

由于您将其嵌入到循环中,因此会向服务器发送N个发布请求。 您应该向服务器发送* 1 *请求,在理想情况下传递'stat' – Atticus 2013-05-19 00:55:44

+0

@Atticus的数组是的,但有时服务无法接受数组,并且您无法更改服务。 – 2013-05-19 06:06:28