Javascript 使用XDomainRequest for IE处理特定的404错误并获取responseText
我正在使用CORS进行跨域呼叫。我这里的问题是我需要处理IE中Javascript 使用XDomainRequest for IE处理特定的404错误并获取responseText,javascript,internet-explorer,cross-domain,xdomainrequest,Javascript,Internet Explorer,Cross Domain,Xdomainrequest,我正在使用CORS进行跨域呼叫。我这里的问题是我需要处理IE中XDomainRequest中的404错误 在XDomainRequest中,我只能找到onerror事件来处理所有错误事件,但在我的要求中,我需要为404错误案例显示空占位符图像(API没有为此提供空的200响应,但使用404),但不考虑其他错误 这是请求URL: 在其他浏览器中,我使用XMLHttpRequest和req.status code==404获取responseText: {"metadata":{"code":40
XDomainRequest
中的404错误
在XDomainRequest
中,我只能找到onerror
事件来处理所有错误事件,但在我的要求中,我需要为404错误案例显示空占位符图像(API没有为此提供空的200响应,但使用404),但不考虑其他错误
这是请求URL:
在其他浏览器中,我使用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'));
}
}
xdr:function(url、方法、数据、回调、errback){
var-req;
if(XDomainRequest的类型!=“未定义”){
req=新的XDomainRequest();
请求打开(方法、url);
req.onerror=函数(){
//我想在这里处理特定的404错误
回调(请求响应文本);
};
req.onload=函数(){
回调(请求响应文本);
};
请求发送(数据);
}else if(XMLHttpRequest的类型!=“未定义”){
req=新的XMLHttpRequest();
if(请求中的('withCredentials')){
请求打开(方法、url、true);
req.onerror=errback;
req.onreadystatechange=函数(){
如果(req.readyState==4){
如果((请求状态>=200&&req.status<400)| |请求状态==404){
回调(请求响应文本);
}否则{
errback(新错误(‘返回的响应状态为非OK’);
}
}
};
请求发送(数据);
}
}否则{
errback(新错误(“不支持CORS”);
}
}
XMLHttpRequest工作正常,除IE外,所有其他浏览器都正常工作。不幸的是,没有提供访问响应HTTP状态代码的任何方法。您可以在XDR实例上访问的唯一属性是:
constructor
、contentType
、responseText
和timeout
;唯一的方法是:abort()
,open()
,和send()
。除此之外,错误处理程序甚至不会传递任何参数。您能在req.responseText上为404进行字符串匹配吗?我查看了MSDN文档,该事件似乎没有暴露错误代码。实际上,这就是这里的问题所在,如果发生任何错误,XDomainRequest的req.responseText将为空,我检查字符串req.responseText==“”是否为真,这意味着不同错误之间没有差异。抱歉,错过了该错误。正如idehold在下面的回答中所说的,您似乎运气不好:/那么,有没有其他方法来提出跨域请求?我们在项目中使用dojo,但使用dojo.io.script和callbackParam:“callback”和url:调用jsnop似乎不起作用。您可以让服务器响应200,即使是验证(结构化)错误,然后让它以头以外的其他方式在响应中公开状态。