2012-07-10 49 views
0

我的工作種類自動完成搜索選項併爲我所用jquery's abort function,因爲我需要中止先前的電話,讓新的呼叫開始每keypress下面是代碼jQuery的AJAX中止

if(ajaxCall) ajaxCall.abort(); 
ajaxCall = $.ajax({ 
    url: '<?php echo base_url(); ?>welcome/' + target, 
    beforeSend: function() {}, 
    complete: function() {}, 
    data: data, 
    type: 'post', 
    success: function(result) { 
     .... 
    } 
}); 

雖然它的工作正常,但是,如果可以使用這種方法,我是否擔心它的使用,因爲我可以在螢幕控制檯中看到很多中斷的調用?我認爲中止的呼叫並不是從服務器上逐漸中止,但是,只有從瀏覽器中我才正確?

這種方法還有其他替代方法嗎?或者可以使用它嗎?

+1

在非常按鍵時發送新的請求是一個可怕的想法。聽起來就像你想要一個debouncing插件,所以只有當用戶停止輸入時才發送請求。 – ThiefMaster 2012-07-10 10:04:55

+0

@ThiefMaster這意味着我的關注是有效的,這甚至不是一個公平的解決方案嗎?你能說出一些debouncing插件嗎?從未聽說過任何 – Junaid 2012-07-10 10:08:30

+0

Underscore.js包含一個函數。 – ThiefMaster 2012-07-10 10:09:22

回答

0

當您撥打abort()時,HTTP連接將被終止。這是否會阻止你的PHP腳本(它看起來像你正在使用CodeIgniter)取決於你的服務器設置,但默認是,是的。

無論服務器是否完成請求與否,雖然,其結果將永遠被髮送到客戶端,所以結果都不會顯示

但是,我會問爲什麼你中止每一個請求。如果我正在編寫自動完成代碼,我會在發送請求之前檢測一段不活動時間(例如,用戶停止鍵入),允許請求完成並顯示; 一些結果(即使它們是1個字符舊)比沒有結果好,對不對?

+0

是它的CI,'它的結果永遠不會被髮送到客戶端,所以結果永遠不會被顯示出來嗎?這是否意味着在任何情況下調用都會進入web服務器?你可以告訴我如何得到這個'無活動期'請 – Junaid 2012-07-10 10:11:50

+1

@Junaid:是的,當它被中止時*取決於用戶按下下一個鍵的速度;它可能在連接建立之前,請求期間甚至*之後。 – Matt 2012-07-10 10:12:57

+0

@Junaid:閒置時間可以使用按鍵中的一個簡單的setTimeout來計算,或者您可以使用一個插件,例如http://code.google.com/p/jquery-debounce/ – Matt 2012-07-10 10:13:27