我需要使用应该在Internet Explorer中运行的Javascript发出发布请求。客户端和服务器位于不同的服务器上,并使用不同的协议。
我尝试了2种不同的方式
1)
var xdr = new XDomainRequest();
var user = document.getElementById('username').value;
var psw = document.getElementById('password').value;
var params = "username="+user+"&password="+psw+"&system=telenetweb";
xdr.open("post", url);
xdr.onprogress = function () {
//Progress
};
xdr.ontimeout = function () {
//Timeout
};
xdr.onerror = function () {
//Error Occured
};
xdr.onload = function() {
//success(xdr.responseText);
}
setTimeout(function () {
xdr.send(params);
}, 0);
但是它不起作用,因为我正在从http向https发出请求。
2)
var http;
try {
http = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
http = false;
}
}
if (!http && typeof XMLHttpRequest!='undefined') {
http = new XMLHttpRequest();
}
var user = document.getElementById('username').value;
var psw = document.getElementById('password').value;
var params = "username="+user+"&password="+psw+"&system=telenetweb";
http.open("POST", url, true);
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http.setRequestHeader("Content-length", params.length);
http.setRequestHeader("Connection", "close");
http.send(params);
这适用于Chrome浏览器,但不适用于IE,因为IE不会将Origin标头附加到请求中。
我怎么解决这个问题?
MSIE的行为显然取决于版本。我不建议您使用XDomainRequest,因为它非常有限,因此不值得付出努力。该XHR2从MSIE版本10的支持,你应该使用,它的工作原理完全一样的方式在Chrome或Firefox。如果您想要具有较低MSIE版本的CORS,我认为您应该忘记它。
如果您确实需要低版本的MSIE(我对此表示怀疑),则可以使用JSONP,它也有局限性,但是也许可以解决您的问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句