0
//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"

当我在循环外回显 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    
4

2 回答 2

2

您的意思是每次遍历结果时都回显 JSON 字符串吗?如果将 echo 语句移出 for 循环,您将获得一个包含所有数据的 JSON 对象,而不是每次添加数据时都获得 JSON 对象。

于 2012-08-07T20:12:26.280 回答
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;在循环内执行,最后的输出将是相同的。

于 2012-08-07T20:13:04.290 回答