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.json并且http://www.abc.com/text.json被浏览器识别为不同的域,即使它们指向后端中的相同资源。

因此,当您尝试从另一个域访问资源时,您会遇到使用相同来源策略的问题。

如果您希望两个 URL 都能正常工作,您可以切换到使用 JSONP 方法。这与本政策无关。

于 2012-07-09T13:19:22.893 回答
3

首先,让不同的域提供相同的内容是一个坏主意。这有两个原因:第一个是同源策略,它可以防止脚本访问不同的域;二是谷歌和其他搜索引擎惩罚重复内容。正如您在此处所做的那样,跨域复制内容将产生这种效果。浏览器和搜索引擎都不认为www.example.comexample.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 回答