JavaScriptを使用しています。XMLHttpRequestはコンソール上で動作しますが、スクリプトタグでjsファイルとして使用するとCORSエラーが表示されます
は、ここで私はES6でコードを書かれているが、私は変換-es2015-モジュールは、UMD使用min.jsを持っている私のコード
const BASE_URL = "https://example.com/api";
export class BankApi {
constructor(XMLHttpRequest){
this.xhr = XMLHttpRequest;
}
getBankList(callback){
this.xhr.open("GET", BASE_URL+"/listbanks", true);
this.xhr.setRequestHeader('Content-Type', 'application/json');
this.xhr.send(null);
this.xhr.onreadystatechange = function(){
if (this.readyState != 4) return;
if (this.status == 200) {
var data = JSON.parse(this.responseText);
callback(data);
}
};
}
}
です。 私は
var bankApi = new BankApi(new XMLHttpRequest());
bankApi.getBankList(function(data){
console.log(data);
})
呼び出すと、私はクロームフォームhttps://engineeringqna.comドメインなしのデバッガコンソールから同じことを行うとき、私はエラーに
XMLHttpRequest cannot load https://example.com/api/listbanks.
Response to preflight request doesn't pass access control check:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'https://engineeringqna.com' is therefore not allowed access.
を取得しますが、クライアントのプロジェクトに
を、このファイルが含まれていますエラー。
var xhr = new XMLHttpRequest();
xhr.open("GET","https://example.com/api/listbanks",true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onreadystatechange = function(){
if (xhr.readyState == 4)
{
if (xhr.status == 200) {
console.log(data);
}
else {
alert("xhr Errors Occured");
}
}
}
xhr.send(null);
エラーはありません。私はコンソールでデータを取得します。 誰でもここで何が起こっているのか説明してもらえますか?
ありがとうございます。あなたはこれを「プリフライト」CORSトリガーcontent-type
application/json
に設定されたよう
ブラウザは、他のドメインが明示的に許可していない場合、ドメインのコードに* different *ドメインのコンテンツにアクセスさせません。 – Pointy
私は同意します。しかし、サーバーにはクロスドメイン要求を受け入れる構成があります。デバッガコンソールのコードのコピーと貼り付けがどのように機能するのか理解できず、コードがプロジェクトに含まれ、ブラウザコンソールから呼び出されたときには機能しません。また、ブラウザのコンソールに角度js $ httpを注入しようとしました。ここでも私が$ http.get要求をしたときに問題なしで結果が得られました。 –
エラー* No 'Access-Control-Allow-Origin'ヘッダーは、要求されたリソースに存在します。*は、サーバーがドメイン間要求を受け入れる構成を持たないことを意味します。 – Pointy