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

Why does my API call work in chrome but not in my code?

我正在尝试调用 Binance API 以获取 BTC 的 LTC 价格,我在浏览器“https://api.binance.com/api/v1/ticker/price?symbol=LTCBTC”上测试了 link 我如何获得 json 文件从那个 link 到我的 javascript 文件?

$(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
        }
});

})

如果您在将数据类型:'jsonp' 更改为数据类型:'json' 后检查控制台,您将得到以下内容,因为您的代码和它们的脚本不在同一主机上,它们需要启用 Access-Control-Allow-Origin 从其他域访问。如果使用 php.

则可以使用 cur

Cross-Origin 请求被阻止:同源策略不允许读取位于 https://api.binance.com/api/v1/ticker/price?symbol=LTCBTC 的远程资源。 (原因:缺少 CORS header 'Access-Control-Allow-Origin')。

在执行来自浏览器或 postman 或 fiddler 的请求时,您将获得结果

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

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

如其他回答中所述,存在 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>

希望对您有所帮助。

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

{"symbol":"LTCBTC","price":"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

但本站不支持

{"code":-1101,"msg":"Too many parameters; expected '1' and received '2'."}


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

是的,它适用于 PHP 包装器。

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