Javascript XMLHttpRequest检测404(未找到)

Javascript XMLHttpRequest检测404(未找到),javascript,Javascript,如果URL是正确的(file.dat存在),这将非常有效(文件长度匹配)。如果是错误的,我将看到非常小的文件长度,而不会看到xhr.onerror 如何检测URL是否不正确 var xhr = new XMLHttpRequest() xhr.responseType = "blob" xhr.onload = ()=> { var reader = new FileReader() reader.onload = evt => { var conte

如果URL是正确的(file.dat存在),这将非常有效(文件长度匹配)。如果是错误的,我将看到非常小的文件长度,而不会看到
xhr.onerror

如何检测URL是否不正确

var xhr = new XMLHttpRequest()
xhr.responseType = "blob"
xhr.onload = ()=> {
    var reader = new FileReader()
    reader.onload = evt => {
        var contents = new Buffer(evt.target.result, 'binary')
        console.log('file len',contents.length) 
    }
    reader.readAsBinaryString(xhr.response)
}
xhr.addEventListener("error", () => { console.error('xhr.onerror',e) })
xhr.open("GET", "file.dat")
xhr.send()

我确实看到控制台中有一个stacktrace指向
xhr.send()
GEThttp://localhost:8080/file.dat 404(未找到)

围绕open和send的try catch不会捕获任何异常

文件由WebpackDevServer提供(我希望这不重要)。

您可以查看

使用以下方法将积分计入


XmlHttpRequest对象(变量
xhr
中有一个对象)具有只读属性
status
,加载后可用于获取状态文本。

此状态中未定义<代码>xhr.状态
works@jcalfee314
如果使用我在示例中所示的常规函数,则此
不是未定义的。如果使用箭头函数,
将指向与函数外部的
相同的对象。
// Not using arrow function because I don't want the lexical `this`
xhr.onload = function() {
    if (this.status === 404) {
       // not found, add some error handling
       return;
    }
    var reader = new FileReader()
    reader.onload = evt => {
        var contents = new Buffer(evt.target.result, 'binary')
        console.log('file len',contents.length) 
    }
    reader.readAsBinaryString(xhr.response)
}