jQuery UI自动完成:如何启动异步进程并在完成之前退出它

我正在使用jQuery UI Autocomplete来构建搜索界面。

我已经定义了一个自定义函数,它返回搜索结果并在按下键时自动更新它们,但是,有时这个自定义函数在按下下一个键之前没有完成(即当我已经写过“Washi”时它仍在处理“Wash” (在写“华盛顿”的路上)。

我希望每次调用自动完成“源”事件都取消之前的function(Wash)并启动新function(Washi)。 具有下一个呼叫取消function(Washi)和启动function(Washin)等。

这种事情是怎么做的?

你应该可以做这样的事情:

var lastXhr; $( "#myAutocomplete" ).autocomplete({ source: function( request, response ) { if (lastXhr) lastXhr.abort(); lastXhr = $.getJSON( "search.php", request, function( data, status, xhr ) { if ( xhr === lastXhr ) { response( data ); } }); } }); 

lastXhr var存储最新的xhr请求。 如果有一个集合并且调用了源函数,那么它将中止lastXhr请求并创建一个新请求。 当ajax请求返回时,如果确保它与lastXhr匹配,如果没有,那么它不会调用response()函数。