Javascript 如何处理CORS错误代码?
编辑:我刚刚意识到这是一个复制品,他尝试了我在最后提出的想法。但我不知道他是否成功(dud user?),也没有其他人发布过解决方案甚至评论,所以我认为值得寻找新的答案 问题:Javascript 如何处理CORS错误代码?,javascript,ajax,http,cors,Javascript,Ajax,Http,Cors,编辑:我刚刚意识到这是一个复制品,他尝试了我在最后提出的想法。但我不知道他是否成功(dud user?),也没有其他人发布过解决方案甚至评论,所以我认为值得寻找新的答案 问题: 我发送了一个正确执行(编辑:错误执行。故事结束…)的CORS请求 服务器接收请求并尝试处理它 服务器返回错误响应,例如422不可处理实体,以及有关错误的JSON信息。我的想法是,我的应用程序可以接收此错误信息,并在UI中进行适当处理 浏览器会阻止我的错误处理程序获取响应内容,甚至无法获取状态代码 显示浏览器接收到40
- 我发送了一个正确执行(编辑:错误执行。故事结束…)的CORS请求
- 服务器接收请求并尝试处理它
- 服务器返回错误响应,例如
,以及有关错误的JSON信息。我的想法是,我的应用程序可以接收此错误信息,并在UI中进行适当处理422不可处理实体
- 浏览器会阻止我的错误处理程序获取响应内容,甚至无法获取状态代码
401
状态代码,但将其视为CORS安全错误:
响应对象,显示我的代码无法访问响应数据(数据:“
,状态:0
):
其他人是如何处理这一限制的?我现在最好的猜测是劫持HTTP“成功”代码(
2XX
)作为错误代码,然后在响应中包含错误信息。这使我无法以正常的方式使用ajax错误处理程序,但我还是将其作为全局ajax过滤器进行处理,因此,此筛选器将捕获异常成功代码,并触发错误处理程序。控制台消息表明服务器在发送401响应代码时未发送所需的访问控制允许源站
标头
您将无法使用CORS错误处理程序将内容注入到DOM中,除非您对此进行了修复
服务器可能会在响应代码为200的响应上正确发送标头。但是,如果您希望使用这些响应代码中的数据,则需要对其他响应代码执行此操作
在客户端做出设计妥协之前,在服务器端解决这个问题。这可能会立即解决您的问题。这似乎是一个不透明的响应,您无法获取标题或响应。所有内容都设置为null或空 或者,您可以在服务器中添加:
Access-Control-Allow-Origin: *
回答得很晚,但如果有人想检查发送
XMLHttpRequest
时是否发生错误,然后采取适当的操作(在客户端),那么这是一个快速解决方法:
try{
request.send();
}catch(err){
if(e.toString().startsWith("NetworkError")){
//pasre the string to check error code
//and take appropriate actions
}
}
这是必要的,因为当出现
NetworkError
时,不会执行onreadystatechange
函数,事实上,整个脚本被终止。该链接确实有另一个答案,顺便说一句。我不知道您是在试图修复错误还是只是捕获错误。我说这是正确执行的COR请求。当服务器以成功代码响应时,浏览器将正确处理该代码。服务器将在成功时发送必要的标头。它也需要在失败时发送它们。换句话说,如果您希望使用200以外的响应代码中的JSON数据,则需要在200以外的响应代码上发送CORS标头。这是否特定于CORS或任何XHR?@colllin我不确定,但控制台中显示NetworkError
的任何内容都可以通过这种方式处理。