3

getJSONを使用してサーバー上のテキストファイルからデータを取得していますgetJSONリクエストで絶対URLを提供しています

var server="http://abc.com/text.json"
$.getJSON(server,function(data){
    console.log(data);
})

したがって、URL http://abc.com/でサイトにアクセスすると、JSON値は適切に取得されますが、URL http://www.abc.com/で同じサイトにアクセスすると、エラーが表示されます。

Origin http://www.abc.com is not allowed by Access-Control-Allow-Origin.

両方のURLが同じページを指している場合、getJSONの動作が異なる理由

4

4 に答える 4

6

基本的http://abc.com/text.jsonhttp://www.abc.com/text.json、バックエンド内の同じリソースを指している場合でも、ブラウザによって異なるドメインとして認識されます。

そのため、別のドメインからリソースにアクセスしようとすると、同一生成元ポリシーで問題が発生します。

両方のURLを機能させたい場合は、JSONPアプローチの使用に切り替えることができます。これは、このポリシーとは独立して機能します。

于 2012-07-09T13:19:22.893 に答える
3

まず、同じコンテンツを提供する別々のドメインを用意することはお勧めできません。これには2つの理由があります。1つは同一生成元ポリシーであり、スクリプトが別のドメインにアクセスするのを防ぎます。2つ目は、Googleや他の検索エンジンが重複コンテンツにペナルティを科すことです。ここで行うように、ドメイン間でコンテンツを複製すると、その効果があります。ブラウザも検索エンジンも、同じドメインであるとはwww.example.com見なしません。example.com

最終的には、これを修正して、すべてのページが同じドメインから提供されるようにする必要があります。

それまでの間、スクリプトが常に現在のドメインにアクセスするようにすることができます。

var server="/text.json"
$.getJSON(server,function(data){
    console.log(data);
});

ドメインを省略すると、現在のドメインが暗黙的に使用されます。

于 2012-07-09T13:22:55.040 に答える
1

トラブルの原因は同一生成元ポリシーです。ドメインは完全に一致する必要があります。

于 2012-07-09T13:20:44.953 に答える
1

あなたが使用することができます

var server = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); 
于 2012-07-09T13:33:48.603 に答える