JavaScript:解码PHP json_encode响应

时间:2016-03-17 00:44:24

标签: javascript php json

例如,我是json_encoding我的数组并输出它:

$key = $this->key;
                    $sql = "SELECT * FROM Requests";                   
                    $result = $this->db->query($sql);
                    $temp = array();
                    foreach($result as $r)
                    {
                        if($r['key'] == $key){
                        array_push($temp, array(
                            'song' => $r['song'],
                            'artist' => $r['artist'],
                            'by' => $r['by']
                        ));
                        }
                    }
                    $this->encoded = json_encode($temp);
                    echo $this->encoded;

然后,我发送了一个GET请求:

$.get('http://www.example.com/file.php')
                .done(function(data){
                    alert(data['artist']);
                });

然而,这提醒:

  

未定义

有人可以帮助我吗?我经常搜索并尝试了很多,但似乎没有任何工作(例如,JSON.Parse)。

编辑:我尝试添加header('Content-Type: application/json');,但它让我犯了这个错误:

  

TypeError:数据为空


提前致谢!



$.get('http://www.syncsapi.x10host.com/API/Public/', {
  start: 'example'
})
$.get('http://www.syncsapi.x10host.com/API/Public/', {
    display: '5'
  })
  .done(function(data) {
    console.log(data[0]);
  });
});

<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
<meta content="utf-8" http-equiv="encoding">
<script src="//code.jquery.com/jquery-1.12.0.min.js"></script>
<script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:4)

所以你的脚本问题是你基本上发出了这样的东西:

[
  {
    "song"   : "...",
    "artist" : "..."
  }
]

但你的javascript代码期待这样的事情:

{
  "song"   : "...",
  "artist" : "..."
}

如果你的意图是只为该PHP服务发回一首歌曲,你应该修改你的PHP服务以删除顶级数组。

但是,如果您打算发回超过1首歌曲,那么您返回的数据是有意义的,但您的javascript却没有。要修复您的JavaScript,您只需更改:

alert(data['artist']);

成:

alert(data[0].artist);

请注意,.artist['artist']是相同的,我的示例中的真正区别在于我添加了[0],它抓取了顶级数组中的第一项。