2017-08-25 5 views
1

まず第一に、私はJavaScriptでこの(多分古い)コードを使用していました:JavascriptでテキストまたはJSONデータを読み込むためにFetch APIのクロスオリジンを使用するにはどうすればよいですか?

function GetJson(url) 
{ 
    // 1. New Object XMLHttpRequest 
    var xhr = new XMLHttpRequest(); 

    // 2. Config it 
    xhr.open('GET', url, false); 

    // 3. Send request 
    xhr.send(); 

    // 4. Errors 
    if (xhr.status != 200) { 
     // Responce error out 
     return(xhr.status + ': ' + xhr.statusText); // 404: Not Found 
    } else { 
     // Responce result 
     return(xhr.responseText); // responseText -- 
    } 
} 

このコードは、問題を解決しました。このURLが来るまで:

https://bittrex.com/api/v1.1/public/getmarketsummaries/

私が遭遇した最初のエラーは、次のとおりです。

のXMLHttpRequestが https://bittrex.com/api/v1.1/public/getmarketsummaries/をロードすることはできません。いいえ 要求された リソースに 'Access-Control-Allow-Origin'ヘッダーが存在します。 Origin 'file://'はアクセスが許可されていません。

ブラウザで何も変更しないようにするには、長い検索でfetch()機能が使用されています。

fetch('https://bittrex.com/api/v1.1/public/getmarketsummaries/',{mode:'no-cors'}) 
    .then( 
    function(response) { 
     if (response.status !== 200) { 
     console.log('Looks like there was a problem. Status Code: ' + 
      response.status); 
     return; 
     } 

     // Examine the text in the response 
     response.json().then(function(data) { 
     console.log(data); 
     }); 
    } 
) 
    .catch(function(err) { 
    console.log('Fetch Error :-S', err); 
    }); 

そしてI:しかし、私は断固として

(JSONへのさらなる変換のために)、JSONのまたはテキストの形で少なくとも形式でサーバーからの応答を取得する方法を理解することはできません私はこれを試してみてください答えを得る:

問題があるように見えます。ステータスコード:0

データを取得する方法はありますか?それは変数で望ましいです。私はちょうどフェッチの仕組みを理解していないので。

さらなる処理のためにAPIからデータを取得するだけで済みます。

+1

モードを 'cors'に変更してください。 'cors'の場合​​、JavaScriptはモードが「no-cors」の場合には結果レスポンスのプロパティにアクセスできません。 –

+0

「cors」の場合は** ' Allow-Origin 'ヘッダーが要求されたリソースに存在します。 Origin 'file://'はアクセスが許可されていません。不透明なレスポンスがあなたのニーズに合っている場合は、CORSを無効にしてリソースを取得するためにリクエストのモードを 'no-cors'に設定してください。** – Ievgen

+1

'mode: 'no-cors''を削除して、 fetch( 'https://cors-anywhere.herokuapp.com/' + 'https:// bittrex)のように、 'https:// cors-anywhere.herokuapp.com/.com/api/v1.1/public/getmarketsummaries/') 'を実行します。その理由の説明については、https://stackoverflow.com/questions/の「No Access-Control-Allow-Origin-header」の問題を回避するためのCORSプロキシの使用方法**のセクションを参照してください。 43871637/no-access-control-allow-origin-header-present-on-the-requested-resource-whe/43881141#43881141 – sideshowbarker

答えて

1

まだCorsに問題があります。 Mode "no-cors"は期待通りに機能しません。

+0

唯一の解決策は、ブラウザのセキュリティを無効にすることです。他の解決策はありませんか? – Ievgen

+0

無効にできるセキュリティ機能ではありません。唯一の解決策は、ドメインの管理者に連絡して、データをロードするURLへのクロスオリジンアクセスを許可することです。 – Thijs

2

あなたが扱っているのは、クロスソースリソース共有(CORS)です。データを要求しているURLでは、別のドメインからデータを取得できません。 2番目のスニペットが機能する理由は、モードをno-corsに設定しているためです。呼び出しは成功しますが、コードはどのデータにもアクセスすることができません。それはあなたの目的のためにちょっと役に立たない。

関連する問題