XMLHttpRequest的响应:预检要求未通过访问控制检查:
问题描述:
我想订阅与下面的HTTP POST请求的火力点云消息传递主题:XMLHttpRequest的响应:预检要求未通过访问控制检查:
var data = null;
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function() {
if (this.readyState === 4) {
console.log(this.responseText);
}
});
xhr.open("POST", "https://iid.googleapis.com/iid/v1/etLaB36oW1w...nyO_Zc26ZPOFTeNuf58-l6uSoJ9Xs1JRYKfqxsmKkdrR-oX4tQsuS_z5C0/rel/topics/Byfjordskole");
xhr.setRequestHeader("authorization", "key=AAAABlxTfxY:APA91bGE3sa09zq...dZSIVJul3N-y1hMJqAoKngwjC_El3rEuH4_-S2gOxKcdAF67HHhGK7pAWJrhyt8JthJGm_QN6JdXTBow62nYodgFvLncfSniwtBinBgIPLaKpT");
xhr.setRequestHeader("content-type", "application/json");
xhr.setRequestHeader("cache-control", "no-cache");
xhr.setRequestHeader("postman-token", "a3ce72a5-f8ba-99e4-59d6-fe3295b84f6e");
xhr.send(data);
这工作,当我用邮差,但我收到以下错误消息时,我尝试使用相同的代码在我的JavaScript应用程序:
XMLHttpRequest cannot load https://iid.googleapis.com/iid/v1/eOEiRqvhD4s:APA91bFFb-uP-Xhf2iD-ALUI_X4M7…gA_YgQgmuib7cCL7UuSdlhUUWmsqwRnkcO2kpAIV_H-_xBPlPd/rel/topics/Eiganesskole.
Response to preflight request doesn't pass access control check:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'https://sk......e.top' is therefore not allowed access.
不要火力云消息抑制我从使这一类型的要求,或者是有这个问题的解决方案?任何帮助将不胜感激。
答
请务必回答这个问题。提供详情并分享您的研究成果!
这堆栈溢出答案解决我的问题:https://stackoverflow.com/a/2067584/6177181
这个问题是浏览器安全有关的:这让我从做跨域请求。解决方案是将我的代码封装在脚本标记中以避免此限制。因此,而不是做从另一个javascript文件这一要求,我只是简单地添加请求的代码在这样的index.html文件:
<script>
function subscribe(currentToken){
"use strict"
let stored_topics = localStorage.getItem("topicsList");
let topics = JSON.parse(stored_topics);
for (let i = 0; i < topics.length; i++){
let data = null;
let xhr = new XMLHttpRequest();
xhr.addEventListener("readystatechange", function() {
if (this.readyState === 4) {
console.log(this.responseText);
}
});
let body = {};
let url = "https://iid.googleapis.com/iid/v1/"+currentToken+"/rel/topics/"+topics[i];
xhr.open("POST", url);
xhr.setRequestHeader("authorization", "key=AAAABlxTfxY:....QAVfBJI8J0RdZSIVJul3N-y1hMJqAoKngwjC_El3rEuH4_-S2gOxKcdAF67HHhGK....2nYodgFvLncfSniwtBinBgIPLaKpT");
xhr.setRequestHeader("content-type", "application/json");
xhr.send(data);
}
}
</script>
(该currentToken从火力点云消息API要求在同一文件(指数的.html))。 请按照此链接上的说明进行操作:https://firebase.google.com/docs/cloud-messaging/js/receive了解有关Firebase云消息传递的信息。
另一个堆栈溢出线程解决了我的问题[链接](http://stackoverflow.com/a/2067584/6177181)。我的解决方案是将上面的代码封装在我的index.html文件的脚本标记中(为了避免访问控制允许原始错误)。 –