JSON编码PHP AJAX jQuery响应错误

时间:2012-11-20 18:05:03

标签: php javascript jquery ajax json

我遇到了从PHP代码中获取响应的问题。 JavaScript文件表示JSON对象的长度为0。

这是我从 getalbums.php 脚本返回的JSON:

[
  {
    "album_id": "50ab2c3db9396",
    "username": "tusik",
    "title": "testalbum",
    "cover_photo_url": "http:\/\/s3.amazonaws.com\/Looking_Glass_Images\/tusik_testalbum_testpic.jpeg"
  },
  {
    "album_id": "50ab3b75a46fe",
    "username": "tusik",
    "title": "test",
    "cover_photo_url": "http:\/\/s3.amazonaws.com\/Looking_Glass_Images\/tusik_test_test.png"
  }
]

getalbums.php

<?php

session_start();
include("db.php");

$albumsArray = array();

$username = $_GET['uid'];
//Preventing MySQL injection
$username = stripslashes($username);
$username = mysql_real_escape_string($username);

$sql = "SELECT album_id,username,title,cover_photo_url FROM albums WHERE   albums.username='$username'";
$result = mysql_query($sql) or die(mysql_error());

echo $count;

while ($row = mysql_fetch_object($result)) {

    $albumsArray[] = $row;
}

echo json_encode( $albumsArray );
?>

如果我输入/getalbums.php?uid=tusik,我会从上面获取JSON,因此我知道该页面有效。


albums.js

$.urlParam = function(name){
var results = new RegExp('[\\?&amp;]' + name + '=([^&amp;#]*)').exec(window.location.href);
return results[1] || 0;
}

var username = $.urlParam('uid');

var data = "uid=" + username;    
$.ajax({
  type: "GET",
  url: "getalbums.php",
  data: data,
  dataType: "json",
  processData: false
}).done(function(data) {
    //Do work

}).fail(function(jqXHR, textStatus) {
  alert( "Request failed: " + textStatus );
});

代码给了我这个错误。

TypeError: Cannot read property 'album_id' of undefined

有人能看出我做错了什么吗?

修改 修正了我的问题,jeroen的建议部分正确。 {'uid':username}应该阅读{"uid":username}

3 个答案:

答案 0 :(得分:4)

如果设置dataType: 'json'data应该已经包含已解析的数据,而不是JSON字符串。所以调用parseJSON()是一个不必要的步骤 - 它将尝试解析你的(已经解析过的)Javascript数组,当然这不是包含JSON的字符串,因此它失败并返回null

你也可以在the manual page for .ajax()(强调我的)上查看:

  

的dataType

     

“json”:将响应评估为JSON, 返回JavaScript   对象 即可。在jQuery 1.4中,JSON数据以严格的方式解析;任何   格式错误的JSON被拒绝,并引发解析错误。 (见json.org   有关正确的JSON格式的更多信息。)

这意味着您应该能够简单地写:

...
}).done(function(data) {
    console.log(data[0].album_id);
})
...

答案 1 :(得分:1)

您需要在您的ajax调用中将密钥和值发送到服务器:

$.ajax({
  type: "GET",
  url: "getalbums.php",
  data: {'uid': username},    // here
  dataType: "json",
  processData: false
}).done(function(data) {

您只是在没有密钥的情况下发送数据,因此$_GET['uid']为空/未设置且查询返回0行。

编辑:您还使用以下行宣传您的json:

echo $count;

您需要确保只有json_encode行被回显/返回到jQuery回调函数,所以只需删除它或将其注释掉。

答案 2 :(得分:-2)

你能尝试简单的eval()函数吗? Click here如果您想了解有关JSON和eval()的更多详细信息。

var test = eval("(" + data + ")"); OR var test = eval(data);

我已经在我的许多应用程序中尝试了这个,这对我来说很好。