【发布时间】:2021-08-08 08:52:35
【问题描述】:
我有以下 API 和用于 fast2sms.com 的 Javscript API:
function sendOtp() {
var settings = {
"async": true,
"crossDomain": true,
"url": "https://www.fast2sms.com/dev/bulkV2",
"method": "POST",
"headers": {
"authorization": "APICodeOfMyAccount",
"Content-Type":"application/json",
"accept": "*/*",
"cache-control": "no-cache",
},
"data": {
"route": "v3",
"sender_id" : "TXTIND",
"language" : "english",
'flash':0,
"message": 'Abccompany.com: '+Math.floor(100000 + Math.random() * 900000)+' is your OTP.' ,
"numbers": $('#sendOtpForm input[name="mobileNumber"]').val()
}
}
$.ajax(settings).done(function (response) {
console.log(response);
});
我在按钮单击时调用了 sendOtp 函数,但它不起作用。如果我根据API文档Fast2sms.com使用PHP使用API,那么短信发送成功。
但是,如果我使用带有 Javascript 的 API,则会显示 CORS 策略错误:
为什么Php 工作如此轻松,而Javscript API 却造成了太多麻烦?任何帮助将不胜感激。
【问题讨论】:
-
似乎 API 不允许
authorization标头 - 它与 PHP 一起使用的原因是因为它不会从服务器跨源 -
您可以阅读文档。不管他们写了什么,我都写了。文档提供的相同 PHP 代码有效,但为什么相同的 Javascript 代码无效,为什么?
-
它在 PHP 中工作,因为 PHP 在服务器上运行并且不受跨源保护 - 虽然该 API 似乎发送了一些 CORS 响应,但它似乎并不打算从浏览器 - 也许这样您就不会将您的授权密钥暴露给互联网?
-
你说我可以阅读文档......好吧,如果你真的链接到一些我可以,但你的文档链接是失败的
-
我看到你已经完成了与他们的示例类似的代码 - 如果它不起作用,那是因为 fast2sms.com 不知道如何正确允许 CORS - 但是,你已经触发了一个 pre -flight 通过添加示例代码中不存在的标头...删除您添加的两个未出现在文档中的标头