好的,由于某些原因,我的脚本不会从第三方网站提取的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
答案 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/。