web-dev-qa-db-ja.com

.getJSONを使用してPlayストアアプリの詳細を取得すると、Cross Origin Block Request [CORS]エラーが発生する

基本的に、42matters.com APPマーケットAPIを使用して、Google Playストアからアプリの詳細や情報を取得していましたが、すべて正常に動作し、JSON応答を取得していましたが、週末の休日後にオフィスに戻ったときは、奇妙なエラーが発生し、何も返されませんでした。

私は次のような$ .getJSON関数を使用しました:

var packageID = 'com.whatsapp';
   $.getJSON('https://42matters.com/api/1/apps/lookup.json?p='+packageID+'&access_token=accesstoken1234')
.done(function(appDetails) {
            $('#logo').html(JSON.stringify(appDetails));
        });

前述のように、これはデータを返していたので、それに応じてすべてを変更できましたが、今ではまったく理由もなくこのエラーが発生しています

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://42matters.com/api/1/apps/lookup.json?p=com.whatsapp&access_token=accesstoken1234. This can be fixed by moving the resource to the same domain or enabling CORS

私はPHPを使用してCORSを有効にしましたが、何も起こらず、Apacheのconfファイルを変更してCORSを有効にしようとしましたが、これでサービスが再起動しないため、立ち往生しています。

もう1つ、ブラウザーに上記のリンクを手動で入力すると、目的の結果が得られます。解決してください

7
Hunain Usman

CORSはブラウザ側でブロックされているため、AJAXは別のドメインからのデータを要求できません。42matters.comチームに連絡して、このようにcrossdomain.xmlを開いてください CORS jQuery AJAX request または 誰かが整形式のcrossdomain.xmlサンプルを投稿できますか?

または、AJAX Cross-Domainの回避策はJSONP: jQuery AJAX cross domain ですが、APIはサポートする必要がありますこの種の要求。

最後のことは、別のソースからデータを収集するためにAJAXを使用しないでください。モバイルプラットフォームの場合、これを行うにはネイティブHTTPリクエストオブジェクトが必要です。

8
imkrisna

私はそれが古い技術であることを知っていますが、私たちの何人かはまだこれに対処しなければなりません。

IIS6 Webサーバーを扱っている場合:

  • インターネットインフォメーションサービス(IIS)マネージャーを開く
  • CORSを有効にするサイトを右クリックして、[プロパティ]に移動します。
  • [HTTPヘッダー]タブに変更する
  • [カスタムHTTPヘッダー]セクションで、[追加]をクリックします
  • ヘッダー名としてAccess-Control-Allow-Originを入力します
  • ヘッダー値として*を入力します
  • Okを2回クリック

IIS7 –これをweb.configに追加します

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <system.webServer>
   <httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Origin" value="*" />
     </customHeaders>
   </httpProtocol>
 </system.webServer>
</configuration>
5
Diego Sagrera

この問題を解決するには、htmlファイルにベースタグを配置します。

<head>
<base href="http://www.otherdomain.com/xyz/">
</head>
0
Devendra Patel