jQuery + JSONP返回空数据?

时间:2012-02-27 06:27:48

标签: javascript jquery json jsonp

好的,由于某些原因,我的脚本不会从第三方网站提取的JSON文件中返回任何数据。

这是代码

$(document).ready(function() {
    var url =  "http://konachan.net/post/index.json?limit=20&tags=hatsune_miku";
    $.getJSON(url + "&callback=?", null, function(items) {
        for(i in items) {
            item = items[i];
                        $("#content").append('<div class="product" id="product-' + item.id + '"><img src="' + item.preview_url + '" width="135" height="138"/><div class="title">' + item.author + '</div><div class="description" style="overflow:hidden;">' + item.tags + '</div><div class="clear"></div></div>');
        }
    });
});

它到底有什么问题?

编辑:PHP Curl仍无效:http://pastebin.com/5gVUviZw

2 个答案:

答案 0 :(得分:3)

我使用回调参数点击了网址http://konachan.net/post/index.json?limit=20&tags=hatsune_miku&callback=test,但我没有看到JSON包含在函数名中。

JSONP的工作方式是当你传递一个回调函数名时,服务器应该在该函数中包装JSON,这样当从服务器返回JavaScript时,调用回调函数,并将JSON数据作为传入一个参数。

// "test" was the callback parameter I used
test({ "my": "data" , "returned_from" : "server" });

在幕后,JSONP使用脚本元素从远程服务器下载JavaScript(JSON)。

由于您的网址中的JSON未包含在函数名称中,因此您无法轻松地跨域访问它。这是Wikipedia Article on JSON with Padding,它会更详细地解释。

也许您可能会检查该特定资源的文档,因为它们很可能使用“回调”以外的参数来指定回调函数来“填充”数据。

如果没有参数将结果包装在函数名中,您可以使用服务器端代理获取JSON响应并将其包装在函数中,然后返回到客户端。

答案 1 :(得分:1)

因为从第三方站点返回的代码显然不是针对JsonP调用的 - 它只返回一个包含[]等数据的数组。但它应返回此数组并调用js函数,以便您的脚本可以访问myCallbackFunc([])之类的数据。

在此页面上搜索jsonp以获取更多信息http://api.jquery.com/jQuery.ajax/