我想获取返回的JSON对象并显示返回的PHP查询,但是当我使用括号访问indices值时,它一次只显示一个字符。基本上我希望每个索引都包含查询中的每一行。此特定查询有两个结果(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);
答案 0 :(得分:5)
...
$output = array();
foreach ($query->result() as $row) {
$output[] = $row->id . ' ' . $row->name;
}
echo json_encode($output);
答案 1 :(得分: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
答案 2 :(得分: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部分 - 就是你所需要的,也许它会帮助那些发现这个问题的人。