【发布时间】:2011-12-05 20:42:58
【问题描述】:
在我的应用程序中,我在一个子域 (dev.u413.com) 上有一个网站,我使用 jQuery 向另一个子域 (api.u413.com) 上的 JSON api 发出 ajax 请求。当我在 Chrome 开发工具和 Firefox Firebug 中检查请求时,Access-Control-Allowed-Origin 似乎阻止了我的请求。我将document.domain设置为当前域的后缀:document.domain = 'u413.com';。
这是我的要求:
$.ajax({
dataType: 'json',
data: { parseAsHtml: true, cli: 'help' },
url: 'http://api.u413.com/',
success: function (response) {
alert(response.Command);
}
});
如果我将ajax请求修改为在同一个域上,则请求成功。
$.ajax({
dataType: 'json',
crossDomain: false,
data: { parseAsHtml: true, cli: 'help' },
url: 'http://dev.u413.com/',
success: function (response) {
alert(response.Command);
}
});
为什么会这样?浏览器不应该抱怨跨域问题,因为我根据same origin policy 上的指南将document.domain 设置为两个子域的共同后缀。
我的应用程序目前使用 jsonp,但我觉得正确的 ajax 请求应该按照我上面链接的相同源策略工作。如果不需要,我宁愿不使用 jsonp。难道不能跨子域发出常规的ajax请求吗?
【问题讨论】:
-
我不想要 jsonp,这就是我的观点。我想跨子域做一个适当的 AJAX 请求,这应该是根据same origin policy 允许的。
-
@ALex 我已经阅读了该文件,现在我正在考虑其他方式:)
-
@DarinDimitrov 我将如何在 api 域上设置它?它只是一个返回 JSON 数据的 api。 (例如api.u413.com/?cli=help)
-
@AlexFord,没关系我犯了一个错误并删除了我的评论。当您执行 AJAX 时,document.domain 与您的方案无关。看我的回答。
标签: javascript jquery json cross-domain jsonp