2013-03-30 59 views
0

我试图从网站上捕捉一些JSON信息。使用Javascript加载外部JSON

我的第一为例它只是一个测试和工作:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"> 
</script> 
<script> 
$(document).ready(function(){ 
$.get("http://www.w3schools.com/jquery/demo_test.asp",function(data,status){ 
     document.write("Data: " + data + "\n<br>Status: " + status); 
    }); 
}); 
</script> 

但在我的第二个例子中的问题及其:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"> 
</script> 
<script> 
$(document).ready(function(){ 
$.get("https://btc-e.com/api/2/ltc_usd/ticker",function(data,status){ 
     document.write("Data: " + data + "\n<br>Status: " + status); 
    }); 
}); 
</script> 

PS - 我试图让网页中的信息在博客中使用它:)

+1

你的第二个例子是否有任何错误,日志消息等? – reima

+1

您不能向外部域发出Ajax请求,除非它们启用了CORS。请参阅https://en.wikipedia.org/wiki/Same_origin_policy。 –

回答

0

使用jQuery的外部JSON意味着使用JSONP。这可以通过页面返回一个JavaScript脚本来实现,该脚本使用所需的数据调用一个函数(您可以定义)。你不能像普通的JSON那样获取数据。所以响应需要看起来像这样:

json_callback({"ticker":{"high":0.77,"low":0.64,"avg":0.705,"vol":107049.5563,"vol_cur":151754.22482,"last":0.76,"buy":0.766,"sell":0.75811,"server_time":1364653244}}); 

而不是

{"ticker":{"high":0.77,"low":0.64,"avg":0.705,"vol":107049.5563,"vol_cur":151754.22482,"last":0.76,"buy":0.766,"sell":0.75811,"server_time":1364653244}} 

(功能就不叫json_callback,但每次将有一个独特的名字。)

这显然依赖于服务器的帮助,所以服务器需要设置为支持JSONP。指示这种情况的正常方式是在URL的末尾添加callback=?,其中?是要调用的函数的名称。如果we try this,您会看到该脚本不会更改。这表明该网站不支持JSONP请求,因此无法使用JSONP访问这些数据。

有很多其他获取数据的方法。最简单的方法可能是使用您自己的服务器从外部服务器代理数据。

+0

如果我没有我自己的服务器?有没有办法,只使用JavaScript来捕获这些信息并使用它? – user2227245

+0

@ user2227245如果服务器不支持,则不需要。这是Javascript中的一项安全功能,通常这是一件非常好的事情。 – lonesomeday