需要帮助调用API

Need Help Calling an API

本文关键字:API 调用 帮助      更新时间:2023-09-26

我们正在尝试使用JavaScript调用API。API网站上有一个JavaScript示例如下:

<!DOCTYPE html>
<html>
<head>
    <title>JSSample</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
</head>
<body>
<script type="text/javascript">
    $(function() {
        var params = {
            // Request parameters
        };
      
        $.ajax({
            url: "https://emi.azure-api.net/ICPConnectionData/single/?id={ICP}&" + $.param(params),
            beforeSend: function(xhrObj){
                // Request headers
                xhrObj.setRequestHeader("Ocp-Apim-Subscription-Key","{subscription key}");
            },
            type: "GET",
            // Request body
            data: "{body}",
        })
        .done(function(data) {
            alert("success");
        })
        .fail(function() {
            alert("error");
        });
    });
</script>
</body>
</html>

我们已经输入了{ICP}和{订阅密钥},但当我们运行它时,每次都会出错。

我们得到的错误只是它失败并显示警报的错误("错误")。我们尝试使用data.status,得到错误0"error"。

这是控制台的屏幕截图和其中的错误。

使用这样的API是新手,所以假设我们只是缺少了一些明显的东西?

提前感谢您的帮助。

API信息的网站在这里

这是我到目前为止的代码,你可以自己试试:

<!DOCTYPE html>
<html>
<head>
    <title>JSSample</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
</head>
<body>
<script type="text/javascript">
    $(function() {
        var params = {
            // Request parameters
        };
      
        $.ajax({
            url: "https://emi.azure-api.net/ICPConnectionData/single/?id=0000212621UNA89&" + $.param(params),
            beforeSend: function(xhrObj){
                // Request headers
                xhrObj.setRequestHeader("Ocp-Apim-Subscription-Key","f9d45d33880f4e0dac46255d9bc90fce");
            },
            type: "GET",
dataType: 'jsonp',
            // Request body
            data: "{body}",
success:function(data){alert(data)}
        })
        .done(function(data) {
            alert("success");
        })
        .fail(function() {
            alert("error");
        });
    });
</script>
</body>
</html>

我认为这是一个跨域的CORS 问题

  • 首先,您可以安装chrome扩展:https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?utm_source=chrome-ntp图标
  • 打开它,看看ajax是否可以获得正确的数据
  • 如果是,则获取数据,如果API属于您,则尝试设置响应头Allow-Control-Allow-Origin:*

更新:

尝试添加dataType和成功选项:

$ajax({
  url:'http://yoururl.com',
  method:'GET',
  dataType: 'jsonp',
  success:function(data){alert(data)}
})

更新:我通过poster测试了api url,api非常适合在响应中没有Allow-Control-Allow-Origin:*头的情况下使用。这导致CORS问题。

当我在jquery-ajax中发送请求时,它返回401拒绝访问错误,这意味着身份验证头不能在jsonp-ajax调用中发送。解决这个问题的一种方法是:

  • 转到API服务器,设置响应头Allow-Control-Allow-Origin:*

你可以参考这个问题:

如何在跨域(CORS)XMLHttpRequest中发送自定义标头?