JavaScript XHR-如果responseType设置为json,则获取非200状态的原始响应数据

JavaScript XHR-如果responseType设置为json,则获取非200状态的原始响应数据,javascript,error-handling,xmlhttprequest,Javascript,Error Handling,Xmlhttprequest,如果在发送请求之前将responseType动态设置为json,是否可以从XMLHttpRequest响应中获取“原始”(文本/数据) 我认为可以有条件地通过另一个对同一URL的请求来完成,并使用overrideMimeType,但对于服务器日志或任何其他进程来说,这可能是不明智的 以下是一个例子: var xhr=new-XMLHttpRequest(); open('GET','/some/path.wtf'); xhr.responseType='json'; xhr.onloadend

如果在发送请求之前将
responseType
动态设置为
json
,是否可以从
XMLHttpRequest
响应中获取“原始”(文本/数据)

我认为可以有条件地通过另一个对同一URL的请求来完成,并使用
overrideMimeType
,但对于服务器日志或任何其他进程来说,这可能是不明智的

以下是一个例子:

var xhr=new-XMLHttpRequest();
open('GET','/some/path.wtf');
xhr.responseType='json';
xhr.onloadend=函数()
{
如果(this.status!==200)
{
console.log(this.response);//null
//将响应文本发送到错误处理程序..叹气:(
返回;
}
};

xhr.send();
以下是该问题的解决方案;不过,这是一种解决方法,但是可能对面临相同问题的其他人有所帮助:

var pth、ext、rsp、xhr;
pth='/some/path/';
rsp=((path.substr(-1)='/')?'json':'blob');//例如
xhr=newXMLHttpRequest();
xhr.patchJSON=((rsp='json')?1:0);
xhr.open('GET',pth);
xhr.responseType=((rsp=='json')?'text':rsp);
xhr.onloadend=函数()
{
如果(this.status!==200)
{
console.log(this.response);//来自服务器的响应文本
//将响应文本发送到错误处理程序..yayy:)
返回;
}
if(this.patchJSON)
{
rsp=JSON.parse(this.response);
if((rsp==null)&&(this.response.trim().length>0))
{
log('json语法错误在:'+pth中);
//将“rsp”发送到错误处理程序
返回;
}
}
//处理blob/markup/etc,-或:
控制台日志(rsp);
};

xhr.send()您是否阅读了MDN的文档?的确,谢谢你:)