Ali*_*udi 4 javascript api jquery postman
亲爱的朋友,我有一个奇怪的问题,我尝试连接到API,当我尝试在邮递员或失眠中做一切API请求时,一切都很好.当我在我的网站甚至在localhost上使用相同的代码时,潜在客户请求不起作用,并告诉我api-version未定义.
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
var settings = {
"async": true,
"crossDomain": true,
"url": "https://affiliate-api.tradingcrm.com:4477/token",
"method": "POST",
"data": "{ userName: \"alpt\", password: \"Alpt@12345\" }"
}
$.ajax(settings).done(function (response) {
var settings2 = {
"async": true,
"crossDomain": true,
"url": "https://affiliate-api.tradingcrm.com:4477/accounts/lead",
"method": "POST",
"headers": {
"Authorization": "Bearer " + response.Token,
"Api-Version": "3",
"Content-Type": "application/json"
},
"data": "{firstName:\"test\",lastName:\"test2\",email:\"test@test.test\"}"
}
$.ajax(settings2).done(function (response2) {
console.log(response2.accountId);
});
});
</script>Run Code Online (Sandbox Code Playgroud)
它的CORS问题,API服务器缺少标题,Access-Control-Allow-Headers因此您无法设置自定义请求标头,例如"Api-Version": "3",解决方案使用CORS代理或从您的服务器检索数据或要求您的提供商添加它.
与Postman不同的是邮递员不要求服务器API它只是简单地发送标题,而Browser因为不同的域它将通过在OPTIONS请求之前用以下标题做请求来询问Post.
Access-Control-Request-Headers: api-version,authorization,content-type
Run Code Online (Sandbox Code Playgroud)
然后,Server API需要使用标头进行响应
Access-Control-Allow-Headers: api-version,authorization,content-type
Run Code Online (Sandbox Code Playgroud)
CORS代理测试:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
var settings = {
"async": true,
"crossDomain": true,
"url": "https://affiliate-api.tradingcrm.com:4477/token",
"method": "POST",
"data": "{ userName: \"alpt\", password: \"Alpt@12345\" }"
}
$.ajax(settings).done(function(response) {
console.log('requesting using CORS Proxy.....');
var settings2 = {
"async": true,
"crossDomain": true,
"url": "https://cors-anywhere.herokuapp.com/https://affiliate-api.tradingcrm.com:4477/accounts/lead",
"method": "POST",
"headers": {
"Authorization": "Bearer " + response.Token,
"Api-Version": "3",
"Content-Type": "application/json"
},
"data": "{firstName:\"test\",lastName:\"test2\",email:\"test@test.test\"}"
}
$.ajax(settings2)
.done(function(response2) {
console.log(response2.accountId);
})
.fail(function(jqXHR, textStatus) {
console.log(textStatus);
console.log(jqXHR.responseText);
});
})
</script>Run Code Online (Sandbox Code Playgroud)