5

我想获取返回的 JSON 对象并显示 PHP 查询返回的内容,但是当我使用方括号访问索引值时,它一次只显示一个字符。基本上我希望每个索引都包含查询中的每一行。这个特定的查询有两个结果(id 和文件名)。我想将 id 和 name 都放入 JSON 数组的一个索引中。输出显示如下:

7 5.jpg
8 7-mini.jpg

这是我的代码...

<script type="text/javascript">

  $(function(){
    $.ajax({                                      
      url: '<?php echo base_url().'jqueryDB/jquery';?>',   
      type:'POST',      
      dataType: 'json',    
      success: function(output_string){
                document.write(output_string[0]);
      }
    });

  }); 

现在这个显示'7',而不是'7 5.jpg'。我怎样才能让它将每一行存储到一个索引中?

这是我的 PHP 文件:

    $userID = $this->session->userdata('id');   
    $query = $this->db->query('SELECT * FROM upload WHERE userID = '.$userID);
    $num_rows = $query->num_rows();
    $val = $query->row_array();    

    $output_string = "";  

    foreach ($query->result() as $row){
        $output_string .= $row->id;
        $output_string .= " ".$row->name."<br />";
    }

    echo json_encode($output_string);
4

3 回答 3

8
...
$output = array();
foreach ($query->result() as $row) {
  $output[] = $row->id . ' ' . $row->name;
}
echo json_encode($output);
于 2012-08-16T20:27:22.090 回答
3

首先,您希望将查询结果存储到数组中,而不是字符串中。调用的结果json_encode将采用该数组并将其转换为 JSON 编码的字符串。

$output_array = array();

foreach($query->result() as $row) {
    $output_array[] = array( 'id' => $row->id, 'name' => $row->name );
}

echo json_encode( $output_array );

请注意,您传递给它的数组可以任意深。 json_encode将根据数组的结构来构造对象。我还建议在浏览器中查看生成的字符串,以了解在对这样的多维数组进行编码时 JSON 的样子。

在您的 javascript 中,您必须解析字符串以使其成为有用的 JavaScript 对象...

success: function(output_string){
    var obj = JSON.parse( output_string );
    // This will iterate over all of the values in the return object
    for(var i in obj) {
        document.write(obj[i].name + '<br>' + obj[i].id);
    }
}

随意以不同的方式构造您的返回对象,我只是脱离了您在问题中提出的内容。

jQuery 还有一些功能,如果您正确指定 MIME 类型,success回调的参数将自动为您解析为 JSON 对象。有关更多信息,请参阅jQuery 文档

于 2012-08-16T20:28:37.517 回答
1

我在@watcher 的答案出现之前写了大部分内容,这可能是你想要的,但已经写好了,所以我想我把它贴出来。我会像这样修改@David Fells 解决方案:

$output = array();
foreach ($query->result() AS $row) {
  $output[$row->id] = array();

  foreach ($row AS $prop=>$value) {
    $output[$row->id][$prop] = $value;
  }
}

$output_json = json_encode($output);

我通常使用 PDO 对象来访问我的数据库并返回一个数组而不是对象。这应该适用于数组,但我相信它也适用于 PHP 中的对象。

这应该适用于返回名为 id 的列的任何查询,并且显然 id 部分可以替换为 $id ,其中 $id 等于您想要使用的任何 id 字符串/整数。

...

现在,当您希望在 PHP 中返回数组(我对 javascript 不是特别熟悉)时,您需要使用:

// The TRUE returns it as an array rather than object.
$output = json_decode($output_json, TRUE);

其中大部分是非常基本的,我想你已经知道了。但是标题让我认为最后一部分 - json_decode 部分 - 是您所需要的,也许它会帮助发现这个问题的其他人。

于 2012-08-16T20:47:41.397 回答