jQuery + JSONP返回空数据?

问题描述:

好吧,由于某种原因,我的脚本不会从第三方站点获取JSON文件中的任何数据。jQuery + JSONP返回空数据?

下面是代码

$(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仍然没有工作:http://pastebin.com/5gVUviZw

+0

http://jsfiddle.net/DM77K/ - 加载此JSFiddle时,请参阅控制台中的错误数据。 – Jasper 2012-02-27 06:39:22

我打的网址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)。

由于在URL中JSON没有被包裹在一个函数名,你不能简单的跨域访问。这里是Wikipedia Article on JSON with Padding,更详细地解释。

也许你会检查特定资源的文件,因为它很可能他们正在使用比其他参数“回调”来指定一个回调函数来“填充”的数据。

如果没有参数包裹在一个函数名的结果,你可以使用一个服务器端代理,以获得JSON响应,并在功能,你再返回到客户端包起来。

+0

没有json的回调函数,所以我的面团它只是“页面”,“限制”和“标签” – 2012-02-27 06:48:19

+0

我将如何使用服务器端代理? – 2012-02-27 06:54:30

+1

服务器端代理在这种情况下是一个好主意,因为您的资源似乎不支持跨域ajax cals/jsonp。基本上(在你的服务器上)你会加载url数据并将其打印出来以便屏幕显示,这样你就不必跨域来通过javascript了。 – Vigrond 2012-02-27 06:58:24

因为从第三方网站返回的代码显然不是一个JSONP调用做 - 它只是返回与像[]数据的数组。但它应该返回这个数组并且调用一个js函数,这样你的脚本就可以访问像myCallbackFunc([])这样的数据。

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

+0

好吧我需要做什么将其推入XML格式?只需将url中的.json替换为.xml,或者它会面对与JSON相同的问题? – 2012-02-27 06:46:06

+0

@cl - 你仍然面临同样的麻烦。使用XML你甚至更有限。您无法进行跨域AJAX调用。您唯一的选择是隐藏在文档中(即查找用于获取填充/函数包装的参数),或者使用服务器端代理来获取JSON并在其中包装一个函数。 – jmort253 2012-02-27 06:48:44