Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 忽略旧的多个异步ajax请求_Javascript_Ajax_Asynchronous - Fatal编程技术网

Javascript 忽略旧的多个异步ajax请求

Javascript 忽略旧的多个异步ajax请求,javascript,ajax,asynchronous,Javascript,Ajax,Asynchronous,我有一个自定义javascript自动完成脚本,它通过多个异步ajax请求命中服务器。(每次按键时。) 我注意到,有时一个较早的ajax请求会在稍后的请求之后返回,这会把事情搞砸 我现在处理这个问题的方法是,我有一个计数器,为每个ajax请求递增。返回计数较低的请求将被忽略 我在想:这样合适吗?还是有更好的方法来处理这个问题 提前感谢, Travis您可以存储一个“全局”currentAjaxRequest,它保存最后一个XHR请求的结构。然后,您可以在发出新请求时中止当前请求 例如: var

我有一个自定义javascript自动完成脚本,它通过多个异步ajax请求命中服务器。(每次按键时。)

我注意到,有时一个较早的ajax请求会在稍后的请求之后返回,这会把事情搞砸

我现在处理这个问题的方法是,我有一个计数器,为每个ajax请求递增。返回计数较低的请求将被忽略

我在想:这样合适吗?还是有更好的方法来处理这个问题

提前感谢,

Travis

您可以存储一个“全局”
currentAjaxRequest
,它保存最后一个XHR请求的结构。然后,您可以在发出新请求时中止当前请求

例如:

var currentAjaxRequest = null;

function autoCompleteStuff() {
    if(currentAjaxRequest !== null) {
        currentAjaxRequest.abort();
    }

    currentAjaxRequest = $.get(..., function(...) {
        currentAjaxRequest = null;

        ...
    });
}

为了避免命名冲突,如果需要的话,将其包装在一个匿名的、即时执行的函数中。

我认为每次按下一个键时发送一个ajax请求是在同时有两个用户时导致yoru服务器过载的一种方法。试着通过设置一个延迟计时器来限制这件事,这样只有在半秒钟内没有按键的情况下才会发送请求,那么当用户停止键入时,您只会收到一次点击。例如,这个评论可能会造成383次服务器点击…@Karl同意,但这仍然可能是一个问题。