【问题标题】:Loading external JSON with Javascript使用 Javascript 加载外部 JSON
【发布时间】:2013-03-30 14:19:59
【问题描述】:

我正在尝试从某个站点捕获一些 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 - 我正在尝试从页面获取信息以在博客中使用它:)

【问题讨论】:

标签: javascript json url external


【解决方案1】:

带有 jQ​​uery 的外部 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 访问此数据。

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

【讨论】:

  • 如果我没有自己的服务器?有没有办法,只使用 javascript 来捕获这些信息并使用它?
  • @user2227245 如果服务器不支持,则不会。这是 Javascript 中的一个安全特性,一般来说是一件非常好的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多