编辑:我刚刚意识到这是Recommended solution for AJAX, CORS, Chrome & HTTP error codes (401,403,404,500)的副本,他尝试了我最后提出的想法。但我无法判断他是否成功(dud用户?),没有其他人发布解决方案甚至评论,所以我认为值得为新答案钓鱼。
问题:
422 Unprocessable Entity
,以及有关错误的JSON信息。我的想法是我的应用程序可以收到此错误信息并在UI中正确处理。显示浏览器收到401
状态代码,但将其视为CORS安全错误:
响应对象,显示我的代码无法访问响应数据(data: ""
,status: 0
):
其他人如何处理此限制?我现在最好的猜测是劫持HTTP"成功"代码(2XX
)作为错误代码,然后在响应中包含错误信息。这使我无法以正常方式使用ajax错误处理程序,但我仍然将其作为全局ajax过滤器处理,因此该过滤器将捕获异常成功代码并触发错误处理程序。
答案 0 :(得分:3)
控制台消息指示服务器在发送401响应代码时未发送所需的Access-Control-Allow-Origin
标头。
除非您修复内容,否则您无法使用CORS错误处理程序将内容注入DOM。
服务器可能正在使用200响应代码的响应上正确发送标头。但是,如果您希望使用这些响应代码中的数据,则需要为其他响应代码执行此操作。
在客户端进行设计妥协之前,在服务器端修复此问题。这可以马上解决你的问题。
答案 1 :(得分:0)
这似乎是一个不透明的响应,你无法获得标题或响应。并且所有内容都设置为null或空。
https://developer.mozilla.org/en-US/docs/Web/API/Response/type
或者可能在服务器中添加:
Access-Control-Allow-Origin: *
答案 2 :(得分:0)
答案很晚,但是如果有人想检查在发送XMLHttpRequest
时是否发生了错误,然后采取适当的措施(在CLIENT端),那么这是一个快速的解决方法:
try{
request.send();
}catch(err){
if(e.toString().startsWith("NetworkError")){
//pasre the string to check error code
//and take appropriate actions
}
}
之所以需要这样做,是因为onreadystatechange
发生时NetworkError
函数没有执行,实际上整个脚本都终止了。