一尘不染

即使document.domain设置正确,跨子域ajax请求也被拒绝

json

在我的应用程序中,我在一个子域(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);
        }
    });

为什么会这样?浏览器不应该抱怨跨域问题,因为我document.domain根据相同来源策略的指南设置了两个子域的通用后缀。

我的应用当前正在使用jsonp,但是我觉得正确的ajax请求应该按照我上面链接的相同原始策略工作。如果不需要,我宁愿不使用jsonp。是否无法跨子域发出常规的ajax请求?


阅读 282

收藏
2020-07-27

共1个答案

一尘不染

document.domain不适用于AJAX。它旨在用于跨域iframe和窗口通信。在您的情况下,您违反了相同的原始策略(表的最后一行),因此您需要使用JSONP或服务器端网桥。

这是一个很好的指南,它说明了用于实现跨域AJAX请求的不同技术。

2020-07-27