我们正在尝试使用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中发送自定义标头?