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. 

不要火力云消息抑制我从使这一类型的要求,或者是有这个问题的解决方案?任何帮助将不胜感激。

+0

另一个堆栈溢出线程解决了我的问题[链接](http://*.com/a/2067584/6177181)。我的解决方案是将上面的代码封装在我的index.html文件的脚本标记中(为了避免访问控制允许原始错误)。 –

请务必回答这个问题。提供详情并分享您的研究成果!

这堆栈溢出答案解决我的问题:https://*.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云消息传递的信息。