如何在AJAX请求超时时正确取消未完成的请求?
在做搜索联想功能时,用户快速输入会导致之前的请求还没回来就覆盖了结果。我用XMLHttpRequest尝试用abort()取消,但代码写法好像有问题:
let xhr;
function search(query) {
if (xhr) xhr.abort(); // 这里报错xhr.abort is not a function
xhr = new XMLHttpRequest();
xhr.open('GET', <code>/api/search?q=${query}</code>);
xhr.onload = function() {
if (xhr.status === 200) {
updateResults(xhr.responseText);
}
};
xhr.send();
}
页面输入时控制台一直报错,而且旧请求似乎没被真正取消,求大神看看哪里写错了?
xhr还没赋值前就调用了abort(),改成这样: