web-dev-qa-db-ja.com

サーバーでクロスドメインリクエストを有効にする方法

サーバーでホストされているjsonファイルがあります。 jsonファイルにAjaxの「GET」リクエストを作成しようとすると、失敗します。

Safariのコンソールを参照してください。「リソースの読み込みに失敗しました」と表示されます。

Firebugは「200 OK」を表示しますが、応答は表示されません。 FirebugでもJSONタブは表示されません。

これは、AJAXを使用したクロスドメインリクエストが許可されていないためだと思います。

どうすればこれを克服できますか?また、サーバーでクロスドメインリクエストを有効にしたい場合、crossdomain.xmlファイルまたは何かを作成する必要があります。よくわかりませんが、これは私が知っていることです。 Googleで検索しましたが、関連するリンクが見つかりませんでした。

これで助けていただければ幸いです。

ありがとう。

PDATE:サーバー側のスクリプト言語(PHP、ASP.NETなど)は使用していません。私はプレーンHTMLとJavaScript/jQueryを使用しています。

PDATE-2:

次のコードを使用して、クロスドメインリクエストを作成しました。

<script src="jquery-1.6.2.js"></script>
  <script>
  $(document).ready(function () {
    $.ajax({
      dataType: 'jsonp',
      data: '',
      jsonp: 'jsonp_callback',
      url: 'http://myhosting.net/myjsonfile.json',
      success: function (jsonData) {
        alert("success")
        alert(jsonData);
      },
      error: function(errorObj) {
        alert(errorObj.statusText);

      },
    });
});

Firebugの「Net」タブに表示されると、JSONタブが表示され、jsonの応答を確認できます。ただし、「成功」コールバックハンドラーは呼び出されませんが、「エラー」コールバックハンドラーが呼び出され、parseerrorというアラートが表示されます。

何が間違っているのでしょうか?

20
Mahendra Liya
Access-Control-Allow-Origin: http://yourdomain-you-are-connecting-from.com

ターゲットサーバー上

pHPで:

 header("Access-Control-Allow-Origin: http://yourdomain-you-are-connecting-from.com");

サーバースクリプト言語を使用したくない場合:これを(Linux)コンソールに配置します

a2enmod headers

.htaccessファイルに­ ­ ­ ­ ­ ­ ­を追加します

Header set Access-Control-Allow-Origin: http://yourdomain-you-are-connecting-from.com
39
genesis

これを。htaccessに入れると、プレーンなajaxが機能します

<ifModule mod_headers.c>
    Header set Access-Control-Allow-Origin: *
</ifModule>
6
boksiora

ジェネシスによって与えられたソリューションは私のために働いたが、URLの末尾のスラッシュを省略する必要がありました。すなわち:

header("Access-Control-Allow-Origin: http://yourdomain-you-are-connecting-from.com");
3
user1316108