如何用json_encode编码这个mysql结果?我究竟做错了什么?

时间:2012-08-07 20:08:25

标签: php mysql json

//this is my mysql result
$search_result=$this->Connect_user_model->get_user($key_word);
$info=array();

foreach($search_result as $row){
    $info[]=array('username' => $row->username, 
                  'email' => $row->email, 
                  'gender' => $row->gender);
    echo json_encode($info);'
}

如何循环此响应? 我得到的答案就像 -

0: {
    username: iamanam,
    email: 1,
    gender: Male
}
email: "1"
gender: "Male"
username: "iamanam"
1: {
    username: admin,
    email: iamanam3@gmail.com,
    gender: Male
}
email: "iamanam3@gmail.com"
gender: "Male"
username: "admin"
2: {
    username: iamanam,
    email: 1@1.com,
    gender: Male
}
email: "1@1.com"
gender: "Male"
username: "iamanam"

当我在loop.it之外回显json_encode但我得到的每个结果都是双倍的 我将此函数用于循环----

function process_response(data){
    var show_user='';

     $.each(data,function(contact,contactInfo) {

      show_user+='<div class="discounted-item '+contactInfo.gender+' music-playlist">';
      show_user+='<img src="" alt="" class="music-playlist-left" width="38px" height="38px"  />';
      show_user+='<h1>';
      show_user+=contactInfo.username;
      show_user+='</h1>';
      show_user+='<p>';
      show_user+= contactInfo.gender;
      show_user+='</p>';
      show_user+='<a  href="" title="" class="tips" rel="">';
      show_user+='<img src="" alt="f" class="music-playlist-right" id="img"></a>';
      show_user+='</div>';

     }); // end of each()

     // add finished HTML to page
     $('#info').append(show_user);

}//process_responce    

2 个答案:

答案 0 :(得分:2)

你是否实际上是指每次迭代结果时回显出JSON字符串?如果将echo语句移出for循环,您将获得一个包含所有数据的JSON对象,而不是每次添加数据时都获取JSON对象。

答案 1 :(得分:2)

你做错了是在循环中输出JSON。

这意味着您的输出实际上是几个单独的JSON块:如果您尝试将该输出作为单个JSON块读取,则它将无效。

您需要做的是将它全部构建到一个数组中,并在完成数组循环后输出JSON。

由于您已经正确构建了$info[]数组,所以修改代码所需要做的就是将echo移到foreach循环之外,如下所示:

foreach($search_result as $row){
    $info[]=array('username' => $row->username, 
                  'email' => $row->email, 
                  'gender' => $row->gender);
}
echo json_encode($info);

希望有所帮助。

顺便说一句,如果$row只包含这三个字段,那么值得知道json_encode()能够像对象一样轻松地编码对象。因此,如果$row只是那三个字段,那么您可以在循环中简单地执行$info[]=$row;,并且结尾处的输出将是相同的。