Php 如何使用json/jquery返回多个数组项

Php 如何使用json/jquery返回多个数组项,php,jquery,Php,Jquery,大家好,快问一下,我有一个查询通常会从数据库返回多个结果,虽然我知道如何返回一个结果,但我不知道如何在jquery中返回多个结果。我只想获取每个返回的结果,并通过prepare函数运行它们。我一直在尝试使用“for”来处理数据数组,但我认为它无法工作,因为我返回了不同的数组值。如果有人有任何建议,我将不胜感激 JQUERY检索 PHP处理 编辑在线用户功能 为什么需要返回多个结果?对于这样简单的事情,只需在服务器端格式化所有内容并立即返回所有HTML,然后让jQuery将其放入。不要让客户端不得

大家好,快问一下,我有一个查询通常会从数据库返回多个结果,虽然我知道如何返回一个结果,但我不知道如何在jquery中返回多个结果。我只想获取每个返回的结果,并通过prepare函数运行它们。我一直在尝试使用“for”来处理数据数组,但我认为它无法工作,因为我返回了不同的数组值。如果有人有任何建议,我将不胜感激

JQUERY检索

PHP处理

编辑在线用户功能


为什么需要返回多个结果?对于这样简单的事情,只需在服务器端格式化所有内容并立即返回所有HTML,然后让jQuery将其放入。不要让客户端不得不处理事情,因为它可能会比较慢。

希望这能帮助您找到正确的方向:

foo.php user_list.js user_list.php
你能再分享一些代码吗?您提供的代码片段没有向我们展示在线用户内部的内容,它是一个函数吗?或者JSON中的值我想返回多个结果的原因是我想淡入单个更新。例如,如果有人上网,他们就会淡入。这就是为什么我认为最好通过数组逐个淡入结果。也许我用了错误的方法。我没有包括它,但是getjson函数在一个setinterval上检查更新首先,感谢macek的详细回复,它在某些方面帮助了我。我计算行数的唯一原因是for循环。我其实并不需要它。至于你的建议,虽然它可能会奏效。这种jquery结构化方法的全部问题在于,我可以根据post数据分别淡入和淡出更新。我想用jquery帖子发送数据,然后在数据库中淡入更新。这就是为什么我有了变量“count2”。有了count变量,新的count条目可以在附加后淡入
 success: function(json) {

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

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

} 
$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;
}
function online_users(response) {
  count2++;

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

  return string;
}
<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>
<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>
<?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;
?>