2012-04-17 42 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