IE中的XMLHttpRequest和setRequestHeader返回错误 [英] XMLHttpRequest and setRequestHeader in IE returns an error
问题描述
我尝试进行跨网域POST请求并返回JSON编码的响应,
一切正常,除了IE 7,8,9。
I尝试这些解决方案,但我得到这个错误:
对象不支持属性或方法'setRequestHeader'
函数createXMLHTTPObject() - 尝试1
function createXMLHTTPObject(){
var xmlhttp = false;
var is_IE = window.XDomainRequest?真假;
if(is_IE){
xmlhttp = new window.XDomainRequest();
} else {
if(window.XMLHttpRequest){
xmlhttp = new XMLHttpRequest();
} else {
xmlhttp = new ActiveXObject(Microsoft.XMLHTTP);
}
}
return xmlhttp;函数createXMLHTTPObject() - 尝试2 p>
var XMLHttpFactories = [
function(){return new XMLHttpRequest()},
function新的ActiveXObject(Msxml2.XMLHTTP)},
function(){return new ActiveXObject(Msxml3.XMLHTTP)},
function(){return new ActiveXObject(Microsoft.XMLHTTP)}
];
function createXMLHTTPObject(){
var xmlhttp = false;
for(var i = 0; i< XMLHttpFactories.length; i ++){
try {
xmlhttp = XMLHttpFactories [i]();
}
catch(e){
continue;
}
break;
}
return xmlhttp;
}
函数send()
这里它返回错误,在 req.setRequestHeader('User-Agent','XMLHTTP / 1.0');
函数send(postData,callback){
var url ='http://domain.com/ajax-processing.php'; // url overlap
var req = createXMLHTTPObject();
if(!req)return;
var method =(postData)? POST:GET;
req.open(method,url,true);
req.setRequestHeader('User-Agent','XMLHTTP / 1.0');
if(postData){
req.setRequestHeader('Content-type','application / x-www-form-urlencoded');
}
req.onreadystatechange = function(){
if(req.readyState!= 4)return;
if(req.status!= 200& req.status!= 304){
console.log('HTTP error'+ req.status);
return;
}
callback(req);
}
if(req.readyState == 4)return;
req.send(postData);
}
这里我调用send函数 >
var insert ='id = 1& type = insert';
CLib.send(insert,function(data){
console.log(data);
});
可以在IE中建立跨网域要求吗?
解决方案感谢很多@Esailija谁通知我,我可以'
所以我尝试了其他的方法和解决方案,我终于回来了一个更简单的方法:
changed POST请求GET和一切工作正常后一些小的更改。
I try to make Cross Domain POST requests and get back JSON encoded responses,
everything works fine except in IE 7, 8, 9.
I have try those solutions but i get this error:
Object doesn't support property or method 'setRequestHeader'
Function createXMLHTTPObject() - attempt 1
function createXMLHTTPObject() {
var xmlhttp = false;
var is_IE = window.XDomainRequest ? true : false;
if (is_IE) {
xmlhttp = new window.XDomainRequest();
} else {
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlhttp;
}
Function createXMLHTTPObject() - attempt 2
var XMLHttpFactories = [
function() { return new XMLHttpRequest() },
function() { return new ActiveXObject("Msxml2.XMLHTTP") },
function() { return new ActiveXObject("Msxml3.XMLHTTP") },
function() { return new ActiveXObject("Microsoft.XMLHTTP") }
];
function createXMLHTTPObject() {
var xmlhttp = false;
for (var i=0; i<XMLHttpFactories.length; i++) {
try {
xmlhttp = XMLHttpFactories[i]();
}
catch(e) {
continue;
}
break;
}
return xmlhttp;
}
Function send()
Here it returns the error, at: req.setRequestHeader('User-Agent', 'XMLHTTP/1.0');
function send(postData, callback) {
var url = 'http://domain.com/ajax-processing.php'; //url overlap
var req = createXMLHTTPObject();
if (!req) return;
var method = (postData) ? "POST" : "GET";
req.open(method, url, true);
req.setRequestHeader('User-Agent', 'XMLHTTP/1.0');
if (postData) {
req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
}
req.onreadystatechange = function() {
if (req.readyState != 4) return;
if (req.status != 200 && req.status != 304) {
console.log('HTTP error ' + req.status);
return;
}
callback(req);
}
if (req.readyState == 4) return;
req.send(postData);
}
Here i call the send function
var insert = 'id=1&type=insert';
CLib.send(insert, function(data) {
console.log(data);
});
Is it possible to make Cross Domain requests in IE?
How i can leave behind this part, without using any other library like jQuery?
解决方案 Thanks a lot @Esailija who inform me that i can't make set request headers with the XDomainRequest.
So i tried other methods and solutions also and i finally came back with a simpler method:
changed the POST requests to GET and everything working fine after some small changes.
这篇关于IE中的XMLHttpRequest和setRequestHeader返回错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!