我正在尝试解析JSON文件中的一些数据。有问题的JSON文件可以在这里看到:http://api.bandsintown.com/artists/weezer/events.json
我使用jQuery检索带有$.getJSON
函数的JSON文件,但是当我尝试附加数据或尝试在警告框中显示时没有任何反应。
代码:
$.getJSON("api.bandsintown.com/artists/weezer/events.json", function(result) {
$.each(result, function(key, val) {
alert(key + val);
});
});
我使用了几种方法但似乎无法找到问题。
答案 0 :(得分:2)
看起来您正在使用AJAX进行跨域请求。所以它不起作用。
尝试jsonp:
$.getJSON("http://api.bandsintown.com/artists/weezer/events.json?callback=?
&app_id=ramesh", function(result) {
$.each(result, function(key, val) {
alert(key + val);
});
});
答案 1 :(得分:0)
使用curl
$to=curl_init('http://api.bandsintown.com/artists/weezer/events.json');
curl_setopt( $to, CURLOPT_POST, true );
curl_setopt( $to, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $to, CURLOPT_POSTFIELDS, $post );
curl_setopt( $to, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec( $to);// final result
答案 2 :(得分:0)
每当您在AJAX中执行跨浏览器请求时,您需要使用JSONP:http://api.jquery.com/jQuery.getJSON/
答案 3 :(得分:0)
在我的控制台上试试,我得到以下内容:
[Error] XMLHttpRequest cannot load http://api.bandsintown.com/artists/weezer/events.json. Origin http://localhost is not allowed by Access-Control-Allow-Origin.
这个“问题”被称为跨源资源共享(a.k.a。 CORS ):
本文档定义了一种启用客户端跨源请求的机制。使API能够对资源进行跨源请求的规范可以使用本规范定义的算法。如果在example.org资源上使用此类API,则hello-world.example.org上的资源可以使用此规范描述的机制(例如,将Access-Control-Allow-Origin:example.org指定为响应头) ),这将允许从example.org获取该资源的来源。
这是一种安全机制,默认情况下,浏览器和服务器在跨站点检索数据时适用。 CORS 的 W3C建议表示服务器必须实现标头Access-Control-Allow-Origin,将服务器指定为允许,或允许每个人从中获取数据(使用通配符*):
用户代理通常对网络请求应用同源限制。这些限制阻止从一个源运行的客户端Web应用程序获取从另一个源检索的数据,并且还限制可以自动启动到不同于正在运行的应用程序源的目标的不安全HTTP请求。
但这仅适用于用户代理(主要是浏览器)。因此,尝试通过ruby获取数据,例如,相应地产生它:
require 'open-uri'
open("http://api.bandsintown.com/artists/weezer/events.json"){|f| f.read()}
这将返回包含JSON的字符串。
关于JSONP :您也无法使用它 - 服务器必须在回调函数中返回JSON数据:
my_callback([{"valid_json":"no!"},{"valid_javascript":"yes!"}])
通过脚本标记完成(如果支持):
<script type="text/javascript" src="http://api.bandsintown.com/artists/weezer/events.json?jsonp=my_callback"></script>
来源:W3C