试图从数据库json编码返回多行

时间:2013-06-14 04:55:57

标签: php jquery ajax json

我正在处理一些事情,我已经将来自各地的代码剪断在一起,但我很难让它工作。

所以我想做的是通过ajax / json / php再一次请求另一个页面并查询数据库,然后返回多个结果并在第一页上打印出来。

我的问题是每当我运行client.php页面时,我才会回来

id:[object Object] name:[object Object]

而不是我想要的数据,我知道这可能只是一个愚蠢的小错误,所以任何帮助将不胜感激。

在我使用mysql而不是mysqli进行烧烤之前,它就是代码来自http://openenergymonitor.org/emon/node/107

的代码

Client.php

    <html>
    <head>
         <script language="javascript" type="text/javascript" src="jquery.js"></script>
    </head>
    <body>

    <h2> Client example </h2>
    <h3>Output: </h3>
        <div id="output">this element will be accessed by jquery and this text    replaced</div>

    <script id="source" language="javascript" type="text/javascript">

    $(function () 
    {
    $.ajax({                                      
    url: 'api.php',                  //the script to call to get data          
    data: "",                        //you can insert url argumnets here to pass to   api.php
                                   //for example "id=5&parent=6"
    dataType: 'json',                //data format      

  success: function(data)          //on recieve of reply
    {

     var id = data[0];              //get id
     var vname = data[1];           //get name

     $('#output').html("<b>id: </b>"+id+"<b> name: </b>"+vname); //Set output element html

     }
     });
     }); 

     </script>
     </body>
     </html>

Api.php

    <?php 

     $host = "localhost";
     $user = "root";
     $pass = "";
     $databaseName = "abeiq_stock";
     $tableName = "variables";

     $con = mysql_connect($host,$user,$pass);
     $dbs = mysql_select_db($databaseName, $con);


     $query = "SELECT * FROM $tableName";
     $result = mysql_query($query);

     $rows = array();

     while($r = mysql_fetch_assoc($result)){
     $rows[] = $r; has the same effect, without the superfluous data attribute
     $rows[] = array('data' => $r);
      }

       echo json_encode($rows);

     ?>

2 个答案:

答案 0 :(得分:1)

您要发回整个对象数组。这个JavaScript是完全错误的:

var id = data[0];              //get id
var vname = data[1];           //get name

它应该像......

var id = data[0].data.id
var vname = data[0].data.id

显然,循环而不是硬编码0,但你明白了。

您还应该学习做一些基本的调试。如果在jQuery回调中使用console.log(data),则可以看到正在反序列化的内容。此外,您可以使用浏览器工具查看原始请求/响应数据。如果你学会调试一下,你可以快速解决这个问题。

而且,为什么要将数据添加到$rows两次?不要那样做。

答案 1 :(得分:0)

我知道这是在6月回来并且有所帮助,但是真正帮助我理解或者至少更好地导航JSON的是它的stringify方法:

JSON.stringify(SOME_JSON_OBJECT);

由于您可以清楚地看到传入的内容成为对象,因此会将其作为对象的所有JSON元素的String转储回来。