【问题标题】:Detect specific error (403) with JS使用 JS 检测特定错误 (403)
【发布时间】:2015-08-01 14:38:21
【问题描述】:

我试图在我的页面上捕获一个潜在的错误,该页面有一组 URL(在页面加载时检索)到需要时加载的各种资源。

但是这些资源只能在设定的时间内使用,因此如果用户长时间闲置页面,这些 URL 可能不再有效并可能返回 403。

我目前正在使用以下方式检测资源上的错误:

$(".identifier").on("error", function () {
    console.log("Error on resource load");
});

但是我可以检测特定类型的错误/错误代码吗?例如403 权限错误,而不是通用的“有错误”。如果可能的话,我希望能够对不同的错误做出不同的反应。

【问题讨论】:

标签: javascript jquery http-status-code-403


【解决方案1】:

假设您在数组中拥有所有可用资源的 URL,例如

var resources = [
    "http://url/to/resource-one.fiel",
    "http://url/to/resource-two.fiel"
    ]

然后您可以使用以下函数来检查这些资源的 http 响应,方法是遍历数组并将每个资源传递给 checkResources

   function checkResource (url, index) {
      var req = new XMLHttpRequest();
      req.open('HEAD', url, true);
      req.send();
      if (req.status === 404) {
        return index;
      }
      if (req.status === 403) {
        return index;
      }
   };

或者使用不带循环的特定 URL 并删除函数中的索引参数, 可能会返回 URL。换句话说,做一个 ajax HEAD 请求,它只会返回 headers 资源,而不是资源本身。

您也可以像这样获取所有标题信息或仅按名称获取特定标题信息

 xmlhttp.open('HEAD', 'path/to/your/resource', true);
 xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState==4) {
      console.log(xmlhttp.getAllResponseHeaders()); // get all header info
      console.log(xmlhttp.getResponseHeader("Last-Modified")); // get by name
    }
 }
 xmlhttp.send(null)

【讨论】:

  • 嗯,好点,我可以检查资源头。但是我希望我能以某种方式读取返回的错误,而不是每次加载某些内容时加倍请求。
  • 您是否通过 ajax 请求资源?
  • 资源是显示在标准 HTML5 视频元素中的视频文件。我正在设置视频元素的来源,浏览器正在获取内容。
  • 据我所知,错误事件处理程序只会提供与脚本和文件相关的错误信息。您尝试捕获的错误与 http 请求有关,因此如果您尝试捕获这些错误并在您的 javascript 中获取有关它们的信息,您将必须使用 ajax 或使用视频元素上的错误事件处理程序并检查networkState 属性,但这不会为您提供有关 http 响应标头的信息。
  • 你找到了一个优雅的解决方案吗?
猜你喜欢
  • 1970-01-01
  • 2017-02-09
  • 2019-07-28
  • 1970-01-01
  • 2013-05-13
  • 1970-01-01
  • 2011-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多