我正在使用CORS进行跨域呼叫。我的问题是我需要在IE中处理XDomainRequest
中的404错误。
在XDomainRequest
中,我只能找到onerror
事件来处理所有错误事件,但在我的要求中,我需要显示404错误情况下的空占位符图像(API不提供此空200响应,但使用404),但无论其他错误。
这是请求URL:
http://photorankapi-a.akamaihd.net/streams/1537083805/media/photorank?auth_token=11ff75db4075b453ac4a21146a210e347479b26b67b1a396d9e29705150daa0d&版本= v2 .
在其他浏览器中,我使用XMLHttpRequest
和req.status code == 404
来获得responseText
:
{"metadata":{"code":404,"message":"Not Found","version":"v2.1"}}
但是当我试图从req.onerror(下面)获得responseText时,我只能得到空字符串,所以我不能告诉404和其他错误的区别。
代码部分如下所示:
xdr: function (url, method, data, callback, errback) {
var req;
if(typeof XDomainRequest !== "undefined") {
req = new XDomainRequest();
req.open(method, url);
req.onerror = function() {
// I want to handle specific 404 error here
callback(req.responseText);
};
req.onload = function() {
callback(req.responseText);
};
req.send(data);
} else if( typeof XMLHttpRequest !== "undefined") {
req = new XMLHttpRequest();
if('withCredentials' in req) {
req.open(method, url, true);
req.onerror = errback;
req.onreadystatechange = function() {
if (req.readyState === 4) {
if ((req.status >= 200 && req.status < 400) || req.status ==404 ) {
callback(req.responseText);
} else {
errback(new Error('Response returned with non-OK status'));
}
}
};
req.send(data);
}
} else {
errback(new Error('CORS not supported'));
}
}
XMLHttpRequest工作良好,所有其他浏览器都在工作,除了IE。
不幸的是,XDomainRequest对象不提供访问响应HTTP状态码的方法。您可以在XDR实例上访问的唯一属性是:constructor
、contentType
、responseText
和timeout
;唯一的方法是:abort()
、open()
和send()
。最重要的是,错误处理程序甚至不传递任何参数。