0

如何修改现有的 JQuery 代码以循环遍历 JSON 数组?例如,当 PHP 从包含多于 1 行的 MySQL 数据库返回 JSON 结果时。

这是我的代码。它仅适用于单行结果。

$(function(){

    $('#btn_select_account').live('click', function() {

    // URL...
    $.getJSON('api.php?',
    // Parameters...
    { call: 'select_account', p0: 'suchislife801' },

     function(result){

        // For each item inside array...
        $.each(result, function(index, value) { 

          // Append to this html element
          $('#output').append(index + ': ' + value + '<br />').fadeIn(300); 

        });

     });

  });

});

以下 PHP 代码....

  function qry_select_account($pk_account) {

  // Global variables
  Global $db_host, $db_user, $db_pass, $db_name;  

  // Connect to database server
  $dbc = mysql_connect($db_host, $db_user, $db_pass) or die(mysql_error());
  // Select target database
  mysql_select_db($db_name) or die(mysql_error());

  // suchislife801 <--- Selects account information
  // Run query
  $sql_qry = mysql_query("SELECT * FROM tblaccount
                         WHERE pk_account = '$pk_account'") or die(mysql_error());

  // SQL Criteria  AND acc_confirmed = 'y' AND acc_locked = 'n'

  // Fetch table row for this user
  $row = mysql_fetch_row($sql_qry);

  print json_encode($row);

  mysql_free_result($sql_qry);

  // Close Connection
  mysql_close($dbc);

  }

生成以下响应:

["20","1","suchislife801","Happy","My first entry title.","Body of my first entry.","2012-04-03","15:06:38","n","0"]

我正在尝试对其进行更改,以使其与以下 PHP 代码一起使用...

  function qry_select_last5_entries_for_user($ent_user) {

  // Global variables
  Global $db_host, $db_user, $db_pass, $db_name;  

  // Connect to database server
  $dbc = mysql_connect($db_host, $db_user, $db_pass) or die(mysql_error());
  // Select target database
  mysql_select_db($db_name) or die(mysql_error());

  // suchislife801 <--- Selects last 5 entries for user
  // Run query
  $sql_qry = mysql_query("SELECT * FROM tblentry 
                          WHERE ent_user = '$ent_user' ORDER BY ent_date DESC , ent_time DESC LIMIT 5") or die(mysql_error());

  // Fetch table rows for this user
  while ($row = mysql_fetch_array($sql_qry, MYSQL_NUM)) {

  print json_encode($row);

  } 

  mysql_free_result($sql_qry);

  // Close Connection
  mysql_close($dbc);

  }















["20","1","suchislife801","Happy","My first entry title.","Body of my first entry.","2012-04-03","15:06:38","n","0"]["19","1","suchislife801","Happy","My first entry title.","Body of my first entry.","2012-04-03","15:06:37","n","0"]["18","1","suchislife801","Happy","My first entry title.","Body of my first entry.","2012-04-03","15:06:36","n","0"]["17","1","suchislife801","Ugly","My first entry title.","Body of my first entry.","2012-04-03","15:06:35","n","0"]["15","1","suchislife801","Lazy","My first entry title.","Body of my first entry.","2012-04-03","15:06:34","n","0"]
4

2 回答 2

2

在您的 php 中,修改循环以创建一个数组,然后回显该数组的 json_encode 结果。

输出应如下所示:

[["20","1","suchislife801","Happy","My first entry title.","Body of my first entry.","2012-04-03","15:06:38","n","0"],["19","1","suchislife801","Happy","My first entry title.","Body of my first entry.","2012-04-03","15:06:37","n","0"],["18","1","suchislife801","Happy","My first entry title.","Body of my first entry.","2012-04-03","15:06:36","n","0"],["17","1","suchislife801","Ugly","My first entry title.","Body of my first entry.","2012-04-03","15:06:35","n","0"],["15","1","suchislife801","Lazy","My first entry title.","Body of my first entry.","2012-04-03","15:06:34","n","0"]]

然后,在 jQuery 中,你会像这样输出它:

var outHtml = "";
$.each(result, function(index, value) { 
    outHtml += "Entry " + index + ":<br />";
    outHtml += $.map(value,function(i,value){
        return i + ": " + value + "<br />";
    }).join("");
    outHtml += "<br /><br />";
});

$("#output").html(outHtml);

演示:http: //jsfiddle.net/R8wvn/

编辑:
php 以获得所需的结果(未测试):

var $out = array();
// Fetch table rows for this user
while ($row = mysql_fetch_array($sql_qry, MYSQL_NUM)) {
  array_push($out,$row);
} 
print json_encode($out);
于 2012-04-05T15:50:31.360 回答
0

由于它看起来也value将是一个 json 对象,因此您可以这样做:

$.each(result, function(index, value) { 
    for (var key in value) 
        $('#output').append(index + ': ' + key + ': ' + value[key] + '<br />').fadeIn(300);
)};

小提琴演示:http: //jsfiddle.net/StefanCoetzee/FZ8f2/3/

编辑:只需将您的 php 代码更改为:

$arr_results = array();
// Fetch table rows for this user
while ($row = mysql_fetch_array($sql_qry, MYSQL_NUM))
    $arr_results[] = $row;         // quicker than using array_push()
echo json_encode($arr_results);    // *echo* is apparently slightly faster than *print*

这会产生有效的 json 输出。

于 2012-04-05T14:50:58.753 回答