XMLHttpRequest检测404(未找到)

时间:2015-10-23 18:14:41

标签: javascript

如果URL正确(file.dat存在),这很好用(文件长度匹配)。如果错了,我会看到一个非常小的文件长度,我不会看到xhr.onerror

如何检测到网址不正确?

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()

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest

我确实在控制台中看到指向xhr.send()的堆栈跟踪 GET http://localhost:8080/file.dat 404 (Not Found)

尝试捕获open和send都没有捕获任何异常。

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

2 个答案:

答案 0 :(得分:5)

您可以查看status of the response object

// 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)
}

归功于https://developer.appcelerator.com/question/129410/xhr-request-cant-check-for-error-for-404-page-or-other-errors

答案 1 :(得分:0)

使用https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#xmlhttprequest-status

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