jQuery自动完成,当我提出一个新的时,我可以让之前的ajax调用停止吗?
我正在使用jQuery的autocomplete
,但是发现了一个与性能相关的问题 – 如果我输入’abc’,它会被’a’,’ab’和’abc’扫描,一次,我怎么能当ajax调用正在通过’abc’进行搜索时,停止前一个’a’,’ab’?
类似的情况是:我使用jQuery DataTables,并希望进行一些搜索,例如,我输入要搜索的内容(调用搜索网络方法),然后单击按钮 – 一次“搜索”3次,或者在我查看时更改搜索文本点击“搜索”,然后提出新的搜索,我怎样才能停止以前无用的ajax调用?
假设您正在使用jQuery UI自动完成 :
- 您可以在开始搜索之前指定字符串的最小长度。 (默认是3我猜)
- 您还可以指定上次击键和ajax调用之间的延迟。 通常应该2-300ms。
- AjaxQueue可能会帮助您清理一些东西。 不知道怎么(我从来不需要它),但值得一试:)
JQuery的$.ajax
返回一个xmlHttpRequest对象,该对象可以通过其原生方法取消.abort()
$("#search").autocomplete({ minLength: 3, delay: 300, // this is in milliseconds json: true, source: function(request, response){ // New request 300ms after key stroke var $this = $(this); var $element = $(this.element); var previous_request = $element.data( "jqXHR" ); if( previous_request ) { // a previous request has been made. // though we don't know if it's concluded // we can try and kill it in case it hasn't previous_request.abort(); } // Store new AJAX request $element.data( "jqXHR", $.ajax( { type: "POST", url: "foo.php", dataType: "json", success: function( data ){ response( data ); } })); } });