【问题标题】:How can I handle the 404 error thrown by making an XMLHttpRequest to an invalid URL?如何处理通过向无效 URL 发出 XMLHttpRequest 引发的 404 错误?
【发布时间】:2020-01-23 01:38:46
【问题描述】:

我正在编写代码,我使用典型的 XMLHttpRequest 使用用户输入进行 API 调用。有时,用户输入的 API 调用是对无效 URL 的(更具体地说,API 是一个词库,当您使用它来询问不在词库中的单词时,您只会收到 404 错误和该页面不存在)。这给出了 404 错误(然后是我认为只是原始副作用的 CORS 错误),并引用了 request.send() 行。我的问题是,无论我尝试什么,我似乎都找不到处理 404 错误的方法。

我尝试在代码的各个部分捕获错误并对其进行处理,但在每一部分中都抛出了错误并且没有得到处理。我尝试处理错误的地方:

  • “错误”事件侦听器。回调被调用,但是错误似乎已经被抛出并且没有被处理
  • 在“load”事件监听器中
  • onreadystatechange 函数
  • 将 request.send() 调用放在 try/catch 块中并使调用同步;与错误事件侦听器一样,catch 代码运行但错误仍未处理并进入控制台。请注意,这是How to catch the error thrown by an invalid URL using XMLHttpRequest 提出的具有相似标题的答案,因此我创建了一个新线程。

如何正确处理此错误,使其不会发送到控制台?

我的代码看起来像(没有上面大多数项目符号过去的尝试):

var req = new XMLHttpRequest();
req.open("GET",url, false);
req.addEventListener("load", function(event) {
... (handle response)
}
req.send(); //this is where the error comes in

【问题讨论】:

  • How can I properly handle this error so it won't be sent to console? - 抱歉,你无法阻止,
  • 抱歉,您能解释一下为什么不这样做吗?通常没有办法处理错误以便捕获它然后不会进入控制台?
  • 控制台显示网络响应,您无法对最终用户隐藏它
  • 我认为这个错误表明我的程序存在缺陷;那么这不是我需要担心的问题吗?
  • 你是对的,这是你的程序中的一个缺陷——你试图访问一个不存在的资源。但这不是逻辑错误,就您尝试从服务器检索的内容而言,这只是一个错误。但是,就 XMLHttpRequest 而言,404 状态并不是错误,它只是一个状态代码,按照惯例,它表示未找到请求的资源的情况。但实际上没有http响应状态会触发javascript XHR/fetch/etc中的异常

标签: javascript xmlhttprequest


【解决方案1】:

用 Jaromanda X 的 cmets 的内容回答我自己的问题。 “控制台显示网络响应,您无法对最终用户隐藏它,”所以只要我发出导致 404 错误的请求,我就无法将其从控制台中取出。鉴于在我的示例中,我看不到有时发出 404 请求的方法(因为需要发出请求以检查词库中是否有单词,如果没有,则会发生 404),没有修复这个问题(并且没有必要修复它)。

【讨论】:

  • so as long as I'm making a request that leads to a 404 error, I cannot get it out of the console 您无法从控制台隐藏任何请求,无论状态如何
猜你喜欢
  • 2017-03-13
  • 2019-05-23
  • 1970-01-01
  • 1970-01-01
  • 2017-08-02
  • 2020-03-17
  • 2013-09-14
  • 2014-04-05
  • 2013-06-17
相关资源
最近更新 更多