jQuery getJSON未定义错误

时间:2012-12-23 01:47:57

标签: javascript jquery json

好吧,所以我做了一些搜索,没有运气。我希望这里有人能指出我正确的方向。我有一个我正在使用的JSON提要,它应该输出各种数据。目前,它只发送回所有变量的“UNDEFINED”响应。这是我正在使用的JS:

$("#loaduserdata").click(function(){
$("#userdata tbody").html("");
    $.getJSON("trendFetch", function(data){
            $.each(data.list, function(i, data){
                var jsondata = data.action;
                console.log (jsondata);
            });
     }
);

我不确定问题出在哪里,因为控制台没有给我任何错误或任何理由认为JSON格式不正确:http://i.imgur.com/ySpdR.png

无论它值多少,这里是我用来生成JSON的代码 - 可能在这方面有问题?

$curl = curl_init();
$url = 'http://api.site.com';

curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => $url
));

$resp = curl_exec($curl);

if($resp){
    echo $resp;
    header("Content-Type: application/json", true);
}
else {
    echo 'Error - no response!';
}

curl_close($curl);  

编辑 - 包括JSON输出:

{
"status": "ok",
"list": {
    "list_id": "2gz",
    "title": "Test List",
    "description": "description text...",
    "image": [
        "http://t2.gstatic.com/images?q=tbn:ANd9GcTz6_4aV6oHsI2kgJRRoSFCTWbew5ChTeBrAmXYh4Gez2J7usm8nwMOsA",
        "http://cdn.list.ly/logos/default-list-image.png"
    ],
    "views": 0,
    "item_count": 1,
    "curator_count": 1,
    "follower_count": 1,
    "listly_url": "http://api.list.ly/list/2gz-test-list",
    "items": [
        {
            "item": {
                "name": "Link 1",
                "image": "http://t2.gstatic.com/images?q=tbn:ANd9GcTz6_4aV6oHsI2kgJRRoSFCTWbew5ChTeBrAmXYh4Gez2J7usm8nwMOsA",
                "note": null,
                "url": null,
                "likes": 0,
                "dislikes": 0
            }
        }
    ],
    "suggested_items": []
}
}

4 个答案:

答案 0 :(得分:4)

echo $resp;
header("Content-Type: application/json", true);

应该是:

header("Content-Type: application/json", true);
echo $resp;

您需要在输出任何内容之前发送HTTP标头。

答案 1 :(得分:3)

在任何输出之前设置标题

header("Content-Type: application/json", true);
echo $resp;

答案 2 :(得分:0)

如果你提供了JSON响应,它会有所帮助。

当我遇到这些类型的问题时,我通常会先退一步(在代码中)和console.log()。例如,console.log(data)中的function(data) {}

我认为 - 从查看输出 - 您的问题是列表实际上不是列表。 data.list实际上是一个对象。因此.each()将迭代各个项目(如list_id,title等)。这些都没有.action属性。

我看不到任何动作属性,所以我无法提出解决方案建议。它可能在列表对象中 - 但您仍然将它视为一个数组(就好像它是list: [{}, {}]而不是list: {})。在这种情况下,您需要修复返回的JSON或删除$.each(),并且只需console.log(data.list.action)

答案 3 :(得分:0)

Musa能够为我解决这个问题,所以万一有人谷歌,问题是我在不需要的时候尝试使用$ .each。如果有人有兴趣,这是正确的代码:

$.getJSON("trendFetch",function(data){
                var tblRow =
                    "<tr>"
                    +"<td>"+data.list.list_id+"</td>"
                    +"<td>"+data.list.title+"</td>"
                    +"<td>"+data.list.description+"</td>"
                    +"</tr>"
                $(tblRow).appendTo("#userdata tbody");

        }
);