2010-11-26 11 views
0

ブラウザからWebサービスを実行できますが、javascriptのxmlhttprequestで試してみると、Access Control-Allow-OriginではOrigin []が許可されません。クロスサイトAjaxコール

javascriptを使用してwebserviceを呼び出すにはどうすればよいですか?私はフレームワークを使用しないで、単に基本的なクライアントサイドのJavaScriptを使用したいと思います。 http://musicbrainz.org/ws/1/track/?type=xml&query=track:alive

ありがとう:

は、参考のために、これは私が消費しようとしているWebサービスのインスタンスです。

+0

javascript以外では、プロキシサーバーを設定する必要があります – generalhenry

+0

ただ好奇心が強いですが、サーバー側のスクリプト言語か純粋なJavaScriptを使用していますか?サーバー側でプロキシスクリプトを作成し、javascriptを使用してそれを消費する方がはるかに簡単です。 – jerjer

答えて

1

できません。別のドメインへのAJAX呼び出しを行うことはできません。それはサーバーによって行われる必要があります。

+0

'XMLHttpRequest'よりもajaxには多くのものがあります - 実際、ajaxはこれを先行しています。隠されたiFramesや動的に挿入された '

1

あるドメインでホストされているページにXMLHttpRequestを使用して別のドメインから情報を取得することはできません。ブラウザは単にそれを許可しません。

取得しているリソースを何らかの形で管理していると、一般的な回避策の1つがかなり信頼できるものになります。これはJSONPと呼ばれ、テクニックはヘッダに<script>というタグを追加するだけです(JavaScriptを使用して動的に)。もちろん、そのスクリプトはどのドメインでもホストできるため、クロスサイトスクリプティングの制限はありません。スクリプトが単純にJSONデータで構成されていれば、あまりうまくいかないでしょう。しかし、JSONデータを関数呼び出し(あなたの側で制御する関数)にラップして、うまくいきます。

someFunctionName({ ... }); 

あなたが取得しているリソースがJSONPをサポートしていない場合は、あなたの唯一の手段は、独自のサーバー上でスクリプトを記述することである(もちろん、ページと同じドメインでホストされている)対象データを取得します。その後、あなた自身のスクリプトに対して通常のAJAX呼び出しを行うことができます。

+0

あなたが記述したのはAjaxのテクニックです。 - aXaxという用語には 'xMLHttpRequest'という要件はありません。実際、ajaxという用語は' XMLHttpRequest'より前です。 – tobyodavies

+0

公正なポイント。修正するように編集しました。 – VoteyDisciple

0

XmlHttpRequestは、同じドメインに対する要求です。これは、「同じ発信元ポリシー」と呼ばれます。 クロスドメインのajaxリクエストを行う場合は、jsonp形式を使用する必要があります。 私はプレーンなJavaScriptを使うのは良いアイデアだとは思っていません - もっと良い解決策があります。 はすぐに使えるフレームワークです。 jQueryまたはMootools。 jQueryでは、簡単なJSONとJSONPリクエストを作成するために$ .getJSONメソッドが用意されています。 How exactly is the same-domain policy enforced? http://api.jquery.com/jQuery.getJSON/http://en.wikipedia.org/wiki/JSON#JSONP

0

ことはできませんが、あなたはあなたのサーバー上でプロキシを作成して、プロキシを介してデータにアクセスすることができます:

詳細について読んでここ

は、PHPでプロキシの例です:

proxy.php

<?php 
    //header('Content-type: text/xml'); 
    $url = 'http://musicbrainz.org/ws/1/track/?type=xml&query=track:alivehttp://www.example.com/'; 
    $xml = file_get_contents($url); 
    echo xml; 
?> 

javascriptのソースURLとしてproxy.phpを使用できるようになりました。