ajax下的xmlHttp 在A域名下请求B域名下的服务,会发生js跨域的问题,研究了网上的解决方案,最后找到一个合适的,分享一下:
问题:
在a.project.com域名下,客户端的js上传文件到b.project.com域名下的服务器,产生跨域问题,
完美解决方案:
1、在b.project.com域下添加ajax.html文件,添加到网站根目录
内容:
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Untitled Page </title>
<script type="text/javascript" language="javascript">
document.domain = "*.project.com";
function getHttpRequest(){
var xmlHttp;
if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
return xmlHttp;
} else if (window.ActiveXObject) {
try {
xmlHttp = new ActiveXObject("MSXML2.XMLHTTP");
return xmlHttp;
} catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
return xmlHttp;
} catch (e) {
alert("不能创建XmlHttp");
return null;
}
}
}
return xmlHttp;
}
</script>
</head>
<body>
</body>
</html>
2、在a.project.com域名下的jsp上,同样将domain设置为 document.domain = "*.project.com";然后添加iframe:
<iframe src="http://upload.docin.com/ajaxdomainproxy.html" id="postiframe" width="0" height="0" style="display:none"></iframe>
3、发起请求的时候,调用postiframe下的getHttpRequest()方法,获得XMLHttpRequest,即可。
获取方法:
function getXmlHttpObj(){
var proxy = document.getElementById("postiframe").contentWindow;
return proxy.getHttpRequest();
}