【问题标题】:Simple Ajax Jquery script- How can I get information for each of the rows in the table?简单的 Ajax Jquery 脚本 - 如何获取表中每一行的信息?
【发布时间】:2011-12-22 14:23:22
【问题描述】:

我正在关注一个简​​单的 ajax>php>mysql 示例发布在这里 http://openenergymonitor.org/emon/node/107

我只能显示第一行的信息。 我的桌子是这样设置的

--------------
|  id  | name|
--------------
| 1    | Pat |
| 2    | Joe |
| 3    | Rob |
--------------

php代码

 $result = mysql_query("SELECT * FROM $tableName");          //query
 $array = mysql_fetch_row($result);                          //fetch result  
 echo json_encode($array);

脚本

$(function () 
  {
    $.ajax({                                      
      url: 'api.php', data: "", dataType: 'json',  success: function(data)        
      { 
        var id = data[0];              //get id
        var vname = data[1];           //get name
         $('#output').html("<b>id: </b>"+id+"<b> name: </b>"+vname); 
      } 
    });
  }); 

第 1 行

如果我输入var id = data[0];,我会得到值 1。 如果我输入 var name = data[1]; 我会得到 Pat。

ROWS 2 n 3 未定义

示例var id=data[2]; 返回未定义 等等

我的问题

  1. 为什么我只获取第一行的值?

  2. 如何获取第一行以外的行的信息?

从 Stackoverflow 上的其他问题中,我看到我可能不得不使用 while 循环,但我不确定为什么或如何。

【问题讨论】:

  • 尝试使用 mysql_fetch_array 而不是 mysql_fetch_row。问候乔纳斯
  • 你能不能单独访问php页面而不是通过ajax请求来告诉我们json echo在屏幕上打印了什么?
  • @Jonas 谢谢。我尝试了 mysql_fetch_array 但它仍然返回未定义的数据 [2]、数据 [3] 等
  • @Guilherme Costa 我得到了 ["1","Pat"]
  • 顺便说一下,所有mysql_fetch_* 函数只返回1行!

标签: php mysql ajax


【解决方案1】:
$result = mysql_query("SELECT * FROM $tableName");
$array = array(mysql_fetch_row($result));

// To store every row in the $array
while($row = mysql_fetch_row($result)) { 
    $array[] = $row; 
} 
echo json_encode($array);

【讨论】:

  • 请添加一些解释而不是仅代码的答案。虽然这可能有效,但 OP 现在也应该为什么以及如何工作。
【解决方案2】:

旧的 MySQL 扩展 mysql 已过时,最好使用 mysqliPDO

mysql_fetch_row() 只返回 1 行! 您必须将其放入循环中,例如:

$data = array();
while ( $row = mysql_fetch_row($result) )
{
  $data[] = $row;
}
echo json_encode( $data );

您还必须更改 JavaScript:

$.ajax({                                      
  url: 'api.php', data: "", dataType: 'json',  success: function(rows)        
  {
    for (var i in rows)
    {
      var row = rows[i];          

      var id = row[0];
      var vname = row[1];
      $('#output').append("<b>id: </b>"+id+"<b> name: </b>"+vname)
                  .append("<hr />");
    } 
  } 
});

顺便说一句,我建议您使用mysql_fetch_assoc(),因为它使您的代码更加灵活和简洁。

【讨论】:

  • @ComFreek PHP 似乎工作正常,因为我得到 [["1","Pat"],["2","Joe"],["3","Rob"] ] 当我运行 PHP 时。但是,#output 中没有显示任何结果。我一定在某个地方犯了错误。
  • 是否可以向 this 添加自动刷新,以刷新 div、table 等,无论对象在定义的时间间隔内如何,例如 5 秒。 ?
  • @kayhanyüksel 是的,这是可能的。有 2 种技术:a) Pull 定期从服务器(PHP 脚本)获取数据。使用“普通”AJAX 请求和window.setInterval() 或使用long pollingb) Push 数据,即使用 WebSockets。网上有很多好的资源,例如:websocket.org
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-28
  • 1970-01-01
  • 1970-01-01
  • 2012-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多