2017-07-27 10 views
0

まずはAPIを扱うのが初めてです。単純なAPIコール(CORS)が機能していない

私は自分のクライアント側とは別のドメイン(天気予報サービス)に最も基本的なAPI呼び出しをしようとしています。とりわけ、私はCORSに問題があり、正しいヘッダーがないなど、crossorigin.me(コード内のURLから明白になる)を介してコールを指示して回避策を試みました。

(これは、コードが、唯一の問題ではありません - コードのために、下にスクロール)しかし、私のコードは、現在、これは完全なコードであるに...

console.log(status); //returns 0 
console.log(statusText); //returns an empty string 

結果。

function createCORSRequest(method, url) { 
 
    xhr = new XMLHttpRequest(); 
 

 
    //I work in Chrome, so I only included withCredentials, not accounting for other browsers 
 
    if ("withCredentials" in xhr) { 
 
    xhr.open(method, url, true); 
 
    } 
 
    xhr.send(); 
 
    console.log(xhr.status); //returns 0 
 
    console.log(xhr.statusText); //returns empty string 
 
} 
 

 
createCORSRequest("GET", "https://crossorigin.me/https://www.metaweather.com/api/location/2459115");

あなたは直接サイトにアクセスした場合、https://crossorigin.me/https://www.metaweather.com/api/location/2459115は、私はこのメッセージを得る:起源を:ヘッダが必要です。コンソールでは、ステータスコード403が与えられますが、サーバーだけがヘッダーにアクセス/アクセスでき、I(コーダー)はできません。

+1

リクエストが送信される前にステータスを読み取ろうとしているだけです。あなたは応答を待つ必要があります。 – Quentin

+1

"私は、サーバーだけがヘッダーを制御/アクセスできることを読んだ" - HTTPメッセージにヘッダーがある。 HTTPリクエストにはヘッダーがあります。 HTTP応答にはヘッダーがあります。サーバーはあなたのHTTPリクエストに 'Origin'ヘッダーが含まれていないと訴えています。これは、XMLHttpRequestで送信しなかったためです。 – Quentin

+0

@Quentin on line 2、私はxhrをXMLHttpRequestとして定義しています。なぜXMLHttpRequestではないのですか?ありがとうございました – thesystem

答えて

1

あなたはxhr.send()に電話してからすぐにに応答のステータスを読もうとしています。

回答が得られるまで待つ必要があります。

ロードイベントリスナーを使用します。

xhr.addEventListener("load", log_status); 
xhr.send(); 

function log_status() { 
    console.log(this.status); 
    console.log(this.statusText); 
} 
関連する問題