Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何处理CORS错误代码?_Javascript_Ajax_Http_Cors - Fatal编程技术网

Javascript 如何处理CORS错误代码?

Javascript 如何处理CORS错误代码?,javascript,ajax,http,cors,Javascript,Ajax,Http,Cors,编辑:我刚刚意识到这是一个复制品,他尝试了我在最后提出的想法。但我不知道他是否成功(dud user?),也没有其他人发布过解决方案甚至评论,所以我认为值得寻找新的答案 问题: 我发送了一个正确执行(编辑:错误执行。故事结束…)的CORS请求 服务器接收请求并尝试处理它 服务器返回错误响应,例如422不可处理实体,以及有关错误的JSON信息。我的想法是,我的应用程序可以接收此错误信息,并在UI中进行适当处理 浏览器会阻止我的错误处理程序获取响应内容,甚至无法获取状态代码 显示浏览器接收到40

编辑:我刚刚意识到这是一个复制品,他尝试了我在最后提出的想法。但我不知道他是否成功(dud user?),也没有其他人发布过解决方案甚至评论,所以我认为值得寻找新的答案

问题:

  • 我发送了一个正确执行(编辑:错误执行。故事结束…)的CORS请求
  • 服务器接收请求并尝试处理它
  • 服务器返回错误响应,例如
    422不可处理实体
    ,以及有关错误的JSON信息。我的想法是,我的应用程序可以接收此错误信息,并在UI中进行适当处理
  • 浏览器会阻止我的错误处理程序获取响应内容,甚至无法获取状态代码
显示浏览器接收到
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
的任何内容都可以通过这种方式处理。