为什么我的API调用在chrome中有效,但在我的代码中无效?

时间:2019-04-20 19:28:09

标签: javascript ajax api call

我试图调用Binance API以获取BTC中的LTC价格,并且在浏览器上测试了链接“ https://api.binance.com/api/v1/ticker/price?symbol=LTCBTC”,如何从该链接获取json文件到我的javascript文件中? / p>

$(document).ready(function() {

var url = 'https://api.binance.com/api/v1/ticker/price?symbol=LTCBTC';

$.ajax( {
    url: url,
    dataType: 'jsonp',
    type: 'GET',
    success: function(data) {
            console.log(data); //returns nothing
        }
});

})

4 个答案:

答案 0 :(得分:5)

如其他答案中所述,存在CORS问题。因此,您可以从客户端尝试使用proxyURL,如下所示,

$(document).ready(function() {

var url = 'https://api.binance.com/api/v1/ticker/price?symbol=LTCBTC';

const proxyURL = "https://cors-anywhere.herokuapp.com/";
$.getJSON(proxyURL + url, function(playerData) {
  console.log(playerData);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

希望有帮助。

答案 1 :(得分:1)

https://api.binance.com/api/v1/ticker/price?symbol=LTCBTC的请求提供了使用CORS策略的json数据

  

{“符号”:“ LTCBTC”,“价格”:“ 0.01520100”}

JSONP看起来像

  

myCallback({“ symbol”:“ LTCBTC”,“ price”:“ 0.01520100”})

这看起来像Javascript / PHP函数,并且工作原理类似。

jsonp的URL包括URL中的回调... https://api.binance.com/api/v1/ticker/price?symbol=LTCBTC&callback=myCallback

但是此网站不支持

  

{“代码”:-1101,“ msg”:“参数太多;预期为'1'并且已接收   '2'。”}


它可能可以在您的网站上用php打开吗?我无法从所用的系统进行测试,我的平板电脑上没有套接字传输“ ssl”设置可进行测试。

是的,它可以通过PHP包装程序使用。

myJSONP(<?php echo file_get_contents('https://api.binance.com/api/v1/ticker/price?symbol=LTCBTC');?>);

答案 2 :(得分:0)

如果在将dataType:'jsonp'更改为dataType:'json'之后在控制台上进行检查,您将得到以下内容,因为您的代码及其脚本不在同一主机上,并且他们需要启用Access-Control-Allow-Origin来从其他域访问。如果您使用php,则可以使用cur。

跨域请求被阻止:“同源起源”策略禁止读取https://api.binance.com/api/v1/ticker/price?symbol=LTCBTC处的远程资源。 (原因:CORS标头“ Access-Control-Allow-Origin”缺失)。

答案 3 :(得分:0)

从浏览器,邮递员或提琴手执行请求时,您将获得结果

但是从应用程序执行请求时,您将失败并显示错误消息

Access to XMLHttpRequest at 'https://api.binance.com/api/v1/ticker/price?symbol=LTCBTC' from origin 'http://127.0.0.1:5500' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

此问题必须从服务器端解决。

请参阅

Cors understanding

此外,如果您使用C#.Net作为后端,请找到解决问题的方法

Solution for cors