jQuery UI 自动完成:你如何启动一个异步进程并在它完成之前退出它
Posted
技术标签:
【中文标题】jQuery UI 自动完成:你如何启动一个异步进程并在它完成之前退出它【英文标题】:jQuery UI Autocomplete: how do you start an asynchronous process and quit it before it finishes 【发布时间】:2010-12-14 14:02:51 【问题描述】:我正在使用 jQuery UI Autocomplete 来构建搜索界面。
我已经定义了一个自定义函数,它返回搜索结果并在按下键时自动更新它们,但是,有时这个自定义函数在按下下一个键之前没有完成(即当我已经编写时它仍在处理“Wash” “Washi”(正在写“Washington”的路上)。
我希望每次调用自动完成“源”事件来取消前一个功能(Wash)并启动新功能(Washi)。具有取消呼叫功能(Washi)和启动功能(Washi)等。
这种事情是怎么做到的?
【问题讨论】:
【参考方案1】:你应该可以做这样的事情:
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()
函数。
【讨论】:
有没有办法包装任意函数/对象,使其具有 abort() 方法并以非阻塞方式运行?还是这个技巧只适用于 $.getJSON 包装器? @tjb abort 专用于 ajax 请求。 彼得森,我认为你的答案是正确的,我接受。但是,这是否可行:我将 URL 写成我知道总会成功的东西,然后我编写一个与返回的数据无关但做其他有用的函数的函数。在那种情况下,我是否能够中止(即使函数被阻塞),并以这种方式通过任意函数获得上述功能? 感谢 tjb 提出这个问题(我也想知道同样的事情!),感谢@PetersenDidIt 的这一行,这是我以前从未见过的:if (lastXhr) lastXhr.abort( );以上是关于jQuery UI 自动完成:你如何启动一个异步进程并在它完成之前退出它的主要内容,如果未能解决你的问题,请参考以下文章
jQuery UI 自动完成:如何让 TAB 选择列表中的第一个选项?
如何使用 KnockoutJS 和 JQuery UI 创建自动完成组合框