nasıl json / jquery kullanarak birden fazla dizi öğelerini geri dönmek için

2 Cevap php

Ben bir sonuca dönmek için biliyorum ederken Hey guys, hızlı soru, ben jquery birden dönmek için nasıl emin değilim, genellikle bir veritabanı birden çok sonuç döndüren bir sorgu var. Ben sadece döndürülen sonuç her alır ve benim hazırlamak fonksiyonu sayesinde bunları çalıştırmak istiyorum. Ben veri dizisini işlemek 'için' kullanmaya çalışıyorlar ama ben farklı bir dizi değerlerini iade ediyorum çünkü ben bu işe sanmıyorum. Herkes herhangi bir öneriniz varsa, ben gerçekten takdir ediyorum.

JQUERY RETRIEVAL

 success: function(json) {

 for(i=0; i < json.rows; i++) {

                $('#users_online').append(online_users(json[i]));
                $('#online_list-' + count2).fadeIn(1500);
} 

} 

PHP PROCESSING

$qryuserscount1="SELECT active_users.username,COUNT(scrusersonline.id) AS rows FROM scrusersonline LEFT JOIN active_users ON scrusersonline.id=active_users.id WHERE topic_id='$topic_id'";
$userscount1=mysql_query($qryuserscount1);
while ($row = mysql_fetch_array($userscount1)) {
$onlineuser= $row['username'];
$rows=$row['rows'];
if ($username==$onlineuser){
    $str2=  "<a href=\"statistics.php?user=$onlineuser\"><div class=\"me\">$onlineuser</div></a>";
    }
else {
$str2= "<b><a href=\"statistics.php?user=$onlineuser\"><div class=\"others\">$onlineuser</div></a></b>";
}
$data['rows']=$rows;
$data['entry']=$str1.$str2;
}

EDIT ONLINE USERS FUNCTION

function online_users(response) {
  count2++;

  var string = '<div class="update-entry"><li id="online_list-'+count2+'">'
      + ''+response.entry+''
      +'</li></div>';

  return string;
}

2 Cevap

Umarım bu doğru yöne yardımcı olacaktır:

foo.php

<html>
  <head>
    <script type="text/javascript" src="user_list.js"></script>
    <style type="text/css" media="screen">
      /* instead of using html tags for markup, use CSS */
      #users_online .me {}
      #users_online .other { font-weight: bold; }
    </style>
  </head>
  <body>
    <div id="content">foo</div>
    <div id="users_online">
      <div class="count"></div>
      <div class="list"></div>
    </div>
  </body>
</html>

user_list.js

<script type="text/javascript" charset="utf-8">
  (function($){

    var refresh_user_list = function(){

      // get the data
      $.getJSON("/user_list.php", function(data)){

        // insert HTML into DOM 
        $("#users_online .count").html(data['count']);
        $("#users_online .list").html(data['users']);

      };

      // refresh users list again every 15 seconds
      setTimeout(refresh_user_list, 15000);
    };

    // after the page is ready, get the user list
    $(document).ready(function(){
      refresh_user_list();
    });
  })(jQuery);
</script>

user_list.php

<?php

// header
header("Content-Type: application/json");

// return data
$data = array(
  "users" => "",
  "count" => 0
);

// query users
$result = mysql_query("
  SELECT
    active_users.username,
    COUNT(scrusersonline.id) AS rows

  FROM scrusersonline

  LEFT JOIN active_users ON scrusersonline.id=active_users.id

  WHERE topic_id='$topic_id';
");

// load users
while($u = mysql_fetch_object($result)){
  $link_class = ($username == $u->username)
    ? "me"
    : "other"
  ;
  // don't use <b> tag here. define bold in the stylesheet with the link's class
  $data["users"]  .= "<a class=\"${link_class}\" href=\"statistics.php?user={$u->username}\">{$u->username}</a>";
}

// load count
// this is sort of silly, but I don't know the way your database is setup so it's hard to advise you how to improve it
$data["count"] = $u->rows;

// return the result
echo json_encode($data);

// make sure you stop the script here so nothing else gets output
exit;
?>

Neden birden çok sonuç dönmek gerekiyor? Bu kadar basit bir şey için, sadece sunucu tarafında her şeyi biçimlendirmek ve bir kerede tüm HTML dönmek, büyük olasılıkla daha yavaş olacaktır, çünkü o zaman jQuery sadece istemci tarafı şeyleri işlemek zorunda yapmayın içeri koyduk.