在javascript中从api加载数据

时间:2015-08-23 17:34:28

标签: javascript xmlhttprequest

我有这样的代码:

<script>
var xhr = new XMLHttpRequest();
  xhr.onreadystatechange = function () {
    if(xhr.readyState === 4 && xhr.status === 200) {
      var data = JSON.parse(xhr.responseText);
      var ex_rate = data["market_price_usd"];
      document.getElementById('btcusd777').innerHTML = ex_rate;
    }
  };
  xhr.open('GET', 'https://blockchain.info/ru/stats?format=json');//&cors=true doesn't help
  xhr.send();
</script>
1 BTC = <span id="btcusd777"></span> USD

但它不起作用,因为api在不同的域上。有办法以某种方式修复它吗?我不想使用jquery

2 个答案:

答案 0 :(得分:1)

The docs声明&#34;如果您在请求中添加cors = true参数,则某些API调用可用于CORS标头。&#34; 但似乎没有是你打电话的情况。

似乎有另一个允许跨源请求的调用:

https://blockchain.info/ru/q/24hrprice

所以只需调整你的电话:

&#13;
&#13;
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
    if (xhr.readyState === 4 && xhr.status === 200) {
        document.getElementById('btcusd777').innerHTML = xhr.responseText;
    }
};
xhr.open('GET', 'https://blockchain.info/ru/q/24hrprice');
xhr.send();
&#13;
1 BTC = <span id="btcusd777"></span> USD
&#13;
&#13;
&#13;

答案 1 :(得分:0)

它似乎不支持CORS,因此如果您无法控制API开发,我认为就是这种情况,唯一的方法是通过您自己的Web服务器代理它。

如果你有一个nginx: https://www.nginx.com/resources/admin-guide/reverse-proxy/

如果您使用的是apache: http://httpd.apache.org/docs/2.2/mod/mod_proxy.html

请注意,jquery或任何其他javascript框架对此无效,因为它是浏览器限制。它似乎没有crossdomain.xml文件,所以flash也无济于事。