這次交作業的時候問了胡立老師關於 error handling 的問題,因為在 DevTools 的 Console 裡會看到 "Uncaught ReferenceError: err is not defined at XMLHttpRequest.request.onreadystatechange" 這一段錯誤碼,所以想問他這個問題應該要怎麼修正。
他的回答很詳細:
你看一下上次作業的這一段:
error: function(err) {
$container.append('<div class="error">Failed to Load Twitch Data.</div>');
}
這邊的 err
是 $.ajax
幫你傳進來的錯誤參數
可是當這次改寫成 vanilla js 的時候,你會發現你沒有 err
這個東西可以拿了
為什麼?因為它沒有給你,所以你這一段:
request.onreadystatechange = function () {
if (this.readyState === 4 && this.status === 200) {
var response = JSON.parse(this.responseText);
callBack(null, response);
} else {
callBack(err);
}
}
他才會出這個錯誤:Uncaught ReferenceError: err is not defined at XMLHttpRequest.request.onreadystatechange,意思就是 err
這個變數沒有宣告,也找不到這東西在哪
要改掉的話,你可以自己建一個 Error 出來,或是傳一個字串其實也可以
request.onreadystatechange = function () {
if (this.readyState === 4 && this.status === 200) {
var response = JSON.parse(this.responseText);
callBack(null, response);
} else {
callBack(new Error('xhr not ready or status not equal to 200'));
}
}
解答之後豁然開朗啊!果然對 Vanilla js 還不太懂,所以還一直用 jQuery 的思考方式去寫。