【发布时间】: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中的异常