Che*_*hev 16 javascript jquery json jsonp cross-domain
在我的应用程序中,我在一个子域(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);
}
});
Run Code Online (Sandbox Code Playgroud)
如果我将ajax请求修改为在同一个域上,则请求成功.
$.ajax({
dataType: 'json',
crossDomain: false,
data: { parseAsHtml: true, cli: 'help' },
url: 'http://dev.u413.com/',
success: function (response) {
alert(response.Command);
}
});
Run Code Online (Sandbox Code Playgroud)
为什么会这样?浏览器不应该抱怨跨域问题,因为我document.domain根据相同原始策略的指南设置了两个子域的公共后缀.
我目前正在使用jsonp的应用程序,但我觉得正确的ajax请求应该按照我上面链接的相同原始策略工作.如果我不需要,我宁愿不使用jsonp.是否无法跨子域定期发出ajax请求?
小智 5
相同的原始政策是我必须处理的最令人沮丧的浏览器相关主题之一.傻到我,同一个域上的2台服务器无法通信.不幸的是,相同的原始策略甚至考虑对同一服务器的2个请求,但是在不同的端口上违反了相同的源策略.我认为未来的浏览器会变得更好:
http://www.html5rocks.com/en/tutorials/file/xhr2/
搜索:跨源资源共享(CORS)
基本上你的服务器只需设置一个响应标题说"是的,允许跨域或交叉子域调用服务器xyz是可以的".
在所有浏览器支持这一点之前还需要一段时间我肯定(并且我必须支持ie8,直到我们的大多数用户仍然关闭它) - 但至少在隧道尽头有光.