当我在文本域小部件中键入文本时,我发送请求,并在其中键入每个字符以从服务器获取匹配的数据。
当我输入的速度非常快时,我使用请求吞服服务器,这导致冻结我的控制,我设法创建限制机制,我设置在发送请求之前应该等待多少ms客户端。这需要设置任意常数ms以等待。更好的解决方案是在按下下一个按键时取消发送上一个请求。
是否可以独立于当前状态取消AJAX请求?如果是,如何实现这一目标?
答案 0 :(得分:1)
致电XMLHttpRequest.abort()
请参阅:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/abort
您必须以某种方式跟踪您的请求,可能是在数组中。
requests = [];
xhr = new XMLHttpRequest(),
method = "GET",
url = "https://developer.mozilla.org/";
requests.push(xhr);
答案 1 :(得分:0)
XMLHttpRequest.abort()方法会中止请求(如果已经存在) 已经送走了。请求中止时,其readyState设置为0 (UNSENT),但不会触发readystatechange事件。
这里要注意的重要一点是,虽然您可以在客户端.abort()
请求(因此不必担心服务器的响应),但您仍然蜂拥服务器,因为所有这些请求都是还在被送。
我的观点是,通过实施限制AJAX请求频率的机制,您第一次就做对了。你提到你有一个问题,这冻结你的控制(我假设你的意思是浏览器要么花更长的时间来响应用户的操作,或者完全停止响应),这可能表明方式存在问题您的应用程序处理异步代码
确保正确使用Promise
之类的异步API,避免执行繁重处理的循环或只是在客户端代码中等待,并使事件处理(即您的AJAX回调)简单快速,以减少影响在用户身上。