Javascript 使用XDomainRequest for IE处理特定的404错误并获取responseText

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

我正在使用CORS进行跨域呼叫。我这里的问题是我需要处理IE中
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,即使是验证(结构化)错误,然后让它以头以外的其他方式在响应中公开状态。