0

XML フィードから「データ」を取得し、それをサーバーでホストしているページに追加するように依頼されました。jQuery Ajax api を使用すると思ったのですが、このエラーが発生しました。

XMLHttpRequest cannot load .../3.atom. Origin http://myserver.com is not allowed by Access-Control-Allow-Origin.

誰かにアクセスを要求する必要がありますか? リクエストに追加できるものはありますか? CORS について読んだことがありますが、この場合に使用すべきサービスはありますか?

これが現時点での私のコードです。

var feedUrl = "http://www.holmanreviews.com/audi-pembroke-pines/3.atom";
var content;

$.ajax({
    type: "GET",
    url: feedUrl,
    dataType: "xml",
    crossDomain: true,
    success: function (xml) {
        $(xml).find('entry').each(function () {
            var $this = $(this);
            var id = $this.attr('id');
            content += id;
        });
    }
});

$('#feed').append(content);

ここにも JS FIddle があります。http://jsfiddle.net/rsturim/6nsyX/

あなたが助けることができれば、これに関するいくつかの背景が大好きです-たくさんありがとう。

4

3 に答える 3

2

このデータにアクセスするには、おそらくサーバー側のプロキシを設定する必要があります。

サーバーを制御できないため、CORS は機能しません。

サーバーが「コールバック」パラメーターを受け入れないように見えるため、JSON-P は機能しません。リクエスト URL に「?callback=foo」を追加してこれをテストしましたが、レスポンスは変わりませんでした。API がコールバック パラメーターの他の名前をサポートしている可能性がありますが、API のドキュメントを見ずに知ることは困難です。

于 2013-01-09T14:43:16.623 に答える
1

リクエストは正しく行われていましたが、リモートサイトはCORSをサポートする必要があり、受け取ったエラーはサポートされていないことを意味します。

これはAtomフィードであるため、リモートサイトがJSONPをサポートする可能性はほとんどないため、プロキシを使用するのが最善の方法です。また、独自にローリングする代わりに、YahooのYQLを使用してXMLまたはJSONをフェッチできます。YQLはCORSをサポートしているため、どちらかを取得できます。

XML:

http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20xml%20where%20url%3D%22http%3A%2F%2Fwww.holmanreviews.com%2Faudi-pembroke-pines%2F3.atom%22%20and%20itemPath%3D%22feed.entry%22&format=xml

JSON:

http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20xml%20where%20url%3D%22http%3A%2F%2Fwww.holmanreviews.com%2Faudi-pembroke-pines%2F3.atom%22%20and%20itemPath%3D%22feed.entry%22&format=json

XMLは、サイトから直接得られるものを正確に提供しますが、JavaScriptを使用してXMLを解析するのはそれほど楽しいことではないため、JSONを使用することを強くお勧めします。(JSONPを取得することもできますが、CORSをサポートするJSONの方が優れています。)

あなたのコードから、基本的なURLからこれらのURLを構築できると確信しているので、演習として残しておきます(-;


10より前のバージョンのInternetExplorer、またはCORSをサポートしていない他のブラウザーを本当にサポートする必要がある場合は、ブラウザーがCORSをサポートしている場合にCORSを使用し、それ以外の場合はJSONPを使用するための適切な方法を次に示します。

dataType: $.support.cors ? "json" : "jsonp"
于 2013-01-09T15:31:26.580 に答える
0

これにはJSONPを使用する必要があります。同一生成元ポリシーを破るのは良いトリックです。非常に危険なので、データのプロバイダーを信頼する必要があります。

リクエスト設定で関連するdataTypeを使用します。

dataType: "xml"

さらに、フィードはJSONPをサポートする必要があります。つまり、リクエストURLの末尾にcallback =?のようなクエリが付いている場合、レスポンスはJavascript関数でラップする必要があり、引用符はエスケープする必要があります。

callback("<your-xml>...</your-xml>");

これがJSONPの基本的な考え方です。なぜこのようにしなければならないのかを理解したい場合は、ウィキペディアの記事をご覧ください:JSONP

于 2013-01-08T21:57:34.977 に答える