2012-08-16 89 views
2

我想要返回JSON对象并显示PHP查询返回的内容,但是当我使用括号访问索引值时,它一次只显示一个字符。基本上我希望每个索引都包含查询中的每一行。这个特定的查询有两个结果(id和文件名)。我想要将ID和名称都放入JSON数组的一个索引中。输出显示如下:从PHP返回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); 
+0

我会使用PARSE而不是dataType ...'var obj = jQuery.parseJSON(your_var);' – Zak 2012-08-16 20:30:08

回答

5
... 
$output = array(); 
foreach ($query->result() as $row) { 
    $output[] = $row->id . ' ' . $row->name; 
} 
echo json_encode($output); 
+0

感谢您的帮助! – KraigBalla 2012-08-17 16:13:07

1

首先,你要查询的结果存储到一个数组,的字符串。调用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 documentation

+0

这可能是更好的答案:)我的只是让你很快到线的尽头,看守给你的有用细节超出了。 – 2012-08-16 20:32:30

+0

@大卫我仍然会给你一个upvote :) – 2012-08-16 20:34:01

1

我在@ watcher的答案出现之前写了大部分内容,可能是你想要的,但是这已经写好了,所以我想我会发布它。我想修改@大卫·费尔斯的解决方案是这样的:

$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对象来访问我的DB和一个返回数组,而不是对象。这应该适用于数组,但我相信它也可以在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部分 - 就是你需要的,也许它会帮助别人找到这个问题。