5

好吧,所以我做了一些搜索和尝试,但没有运气。我希望这里有人能指出我正确的方向。我有一个我正在使用的 JSON 提要,它应该输出各种数据。目前,它只是发回所有变量的“未定义”响应。这是我正在使用的 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

4 回答 4

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

应该:

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

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

于 2012-12-23T01:50:44.580 回答
3

在任何输出之前设置标题

header("Content-Type: application/json", true);
echo $resp;
于 2012-12-23T01:50:39.603 回答
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).

于 2012-12-23T02:01:34.640 回答
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");

        }
);
于 2012-12-23T02:32:26.620 回答