我有以下结构:http://subdomain.mysite.com
从那里开始,我希望能够对http://mysite.com/releases/ajax/file.php
如果我使用上面的绝对URL,JS会在行上发出错误,指出“权限错误”:
xmlhttp.open("POST",url,true);
有没有办法从子域到达相对路径?如果没有,我可能会使用重定向来使用mysite.com/subdomains
。
答案 0 :(得分:2)
这是因为同源政策。默认情况下,AJAX请求不能跨越域边界,即使它是子域(即使对于mysite.com和www.mysite.com,或https://mysite.com和http://mysite.com)。您可以在此处找到有关此安全功能的更多信息:
http://en.wikipedia.org/wiki/Same_origin_policy
由于这种限制性限制对于开发人员而言是如此成问题,因此较新的浏览器支持称为CORS(跨源资源共享)的策略框架,该框架允许您指定允许的主机进行通信。不幸的是,在版本8之前,Internet Explorer中没有实现基本支持,所以如果你必须支持IE6-7,它将不适合你:
http://en.wikipedia.org/wiki/Cross-origin_resource_sharing
在这种情况下,大多数人会做的是使用JSONP,这利用了普通脚本标签不受同源策略约束的事实,因此JSON响应包含在函数调用中并执行通过浏览器,允许该回调访问该数据。有关JSONP的更多信息:
http://en.wikipedia.org/wiki/JSONP
JSONP的一个值得注意的限制是它只能用于对服务器的GET请求(而不是POST或其他HTTP请求类型)。
许多流行的JavaScript框架(如jQuery)支持JSONP作为选项(大多数只是通过在创建AJAX请求时切换请求类型变量),但显然您还需要设置正在处理的服务器端脚本这些要求做出适当的回应。