【问题标题】:How to handle 403 ajax response in jQuery如何在 jQuery 中处理 403 ajax 响应
【发布时间】:2013-08-05 05:04:06
【问题描述】:

在 jquery 的 $.ajax 请求中,我需要帮助处理来自我的服务器的 403 错误。它将它作为 JS 错误发送,因为该请求被禁止,但我只希望错误成为 Ajax 响应的一部分,而不仅仅是导致整个应用程序失败的 JS 错误。 403 来自 OAuth2。如果需要提供任何代码来更好地澄清我的问题,请告诉我。

我怎样才能做到这一点?

【问题讨论】:

  • 不要将解决方案作为问题的一部分,请将其添加为新答案。
  • 此外,您不应将标题编辑为“已解决”,而应仅接受答案,这就是人们需要问题有答案的所有迹象。

标签: jquery ajax error-handling


【解决方案1】:

解决方案:我发现每个 ajax 请求处理这种情况的最佳方法是使用 statusCode 方法:

statusCode: {
   403: function() { 

   },
   200: function(data) {

   }
   //other codes. read the docs for more details
}

【讨论】:

  • 如果服务器配置正确,使用statusCode 将无法帮助您处理 403 错误(请参阅下面的评论)。通过尝试 $.getJSON() this file 自己尝试一下(它应该返回正确的 403 - Access Denied)。
【解决方案2】:

这适用于我的所有应用:

(function($){
    $(document).on('ajaxError', function(event, xhr) {
      if (xhr.status === 401 || xhr.status === 403) {
        window.location.reload();
      }
    });
})(jQuery);

【讨论】:

    【解决方案3】:

    检查提供的 URL 是否正确。

    如果仍然收到 403 作为响应,请尝试使用 try - catch 块并相应地处理错误。

    try
      {
      //Run some code here
      }
    catch(err)
      {
      //Handle errors here
      }
    

    【讨论】:

    • 提供的 url 是正确的,但如果有区别,请求是 HTTPS。我正在使用 jquery 的 $.ajax 请求,它在源代码中说“不要使用 try/catch。jquery 自己处理它”(类似的东西)。我将尝试找到其他方法来解决它。谢谢。
    • 如果服务器在响应中发送 403,则服务器配置错误,因为根据 RFC spec,403 是服务器不应满足请求的时间,这意味着它不应发送响应。跨度>
    • 我不同意@10basetom。文档说不要放弃回复​​。如果您不想透露资源的存在,则响应“应该”用 404 来实现,如果你想透露资源的存在,则用 403 来实现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多