2013-07-13 105 views
-1

我想通過JSON/jQuery列出最近活躍的用戶。但是,這種計數系統並不像應該那樣工作。它列出了用戶並給出了「沒有活動用戶」的消息。我怎麼能解決這個問題?Jquery - 計數JSON元素

謝謝!

PHP代碼,抓住活動用戶:

$liveView_single = array(); 
$liveView_array = array(); 

while ($row = mysqli_fetch_assoc($result)){ 
    extract($row); 

    $liveView_single['id'] = $id; 
    $liveView_single['type'] = $type; 
    $liveView_single['username'] = $username; 
    $liveView_single['lastip'] = $lastip; 
    $liveView_single['lastactivitypage'] = $lastactivitypage; 

    $liveView_full[] = $liveView_single; 
} 

echo(json_encode($liveView_full)); 
?> 

jQuery的,抓住所述JSON元件

<script type="text/javascript"> 

//counter for number of JSON elements 
var i=0;   

//show active users function 
function showActiveUsers(){ 
$('#content').html(''); 
$('#noActiveUsers').html(''); 

$.get("array.php", function (activeUsersList) { 
     $.each(activeUsersList, function (a, b) { 
      $("#content").append("<tr class=\"userRow\" style=\"display:none\">" +  "<td class=\"userId\">" + b.id + "</td>" 
         "<td class=\"type\">" + b.type + "</td>" 
         "<td class=\"username\">" + b.username + "</td>" 
         "<td class=\"lastip\">" + b.lastip + "</td>" 
         "<td class=\"lastActivityPage\">" + b.lastactivitypage + "</td>" + "</tr>"); 

      $(".userRow").show();    
    //add to counter of JSON elements 
    i++; 
    });  
     }, "json"); 
     if (i == 0){ 
      $('#heading').hide(); 
      $('#noActiveUsers').append('<h2>There are no active users.</h2>'); 
      $('#noActiveUsers').show('slow'); 
     } 

     //reset timer 
     setTimeout("showActiveUsers()", 3000); 
    } 

    $(document).ready(function() { 
     showActiveUsers(); 
    }); 

</script> 
+0

爲什麼大家都投票反對這個問題?它在我的最終格式正確 - 但現在接受@ dakshbhatt21的更正 – sixli

回答

1

Ajax請求是,默認情況下,異步執行(故名AJAX)。該腳本向服務器發出ajax請求,並立即繼續執行腳本(if(i==0))。數據準備就緒後,將繼續執行成功功能(function (activeUsersList))。要解決這個問題,你可以使ajax請求同步(但在這種情況下,沒有理由;請參閱the docs如何做到這一點)。另一種方式是將「無用戶在線消息」移動到回調函數中。這更合乎邏輯,因爲您需要來自ajax請求的數據來正確確定是否有用戶在線。

在下面的示例中,我刪除了i並添加了將if (i == 0)塊移入回調函數。

$.get("array.php", function (activeUsersList) { 

    $.each(activeUsersList, function (a, b) { 
      $("#content").append("<tr class=\"userRow\" style=\"display:none\">" + 
             "<td class=\"userId\">" + b.id + "</td>" + 
             "<td class=\"type\">" + b.type + "</td>" + 
             "<td class=\"username\">" + b.username + "</td>" + 
             "<td class=\"lastip\">" + b.lastip + "</td>" + 
             "<td class=\"lastActivityPage\">" + b.lastactivitypage + "</td>" + 

           "</tr>"); 
      $(".userRow").show(); 

      //add to counter of JSON elements 
    }); 

    //Move this into the callback function. 
    if(activeUsersList.length == 0) { 
     $('#heading').hide(); 
     $('#noActiveUsers').append('<h2>There are no active users.</h2>'); 
     $('#noActiveUsers').show('slow'); 
    } 


}, "json"); 
+0

謝謝 - 但它只是保持表的標題。 IF語句中不做任何事情。我怎麼能爲JSON元素添加一個計數器?只是因爲我需要監測計數的變化......謝謝! – sixli

+0

'activeUsersList.length'包含json列表中的條目數量。如果我閱讀你的代碼,這相當於在線人數。 – Sumurai8

+0

我使用了與上面提供的完全相同的代碼 - 但是當沒有活動用戶時IF塊不會執行......任何想法爲什麼?編輯 我的不好... PHP有一個錯字...謝謝!你能告訴我如何使用'activeUsersList.lenght'來比較數字是增加還是減少? – sixli