我試圖找出一個ajax調用...我需要調用阻止並完成加載HTML內容,然後再次執行(它由keyup事件觸發)...否則返回的HTML實際上會加載多次。在我的情況下,ajax調用返回HTML,然後執行JS函數。但是當它被多次加載時,JS函數會執行兩次=錯誤。Ajax調用在實際完成調用之前完成成功?
這裏是我的代碼(警告框僅用於幫助...):
$(document).ready(function() {
var isProcessing = false;
$('#productSearchInput').keyup(function() {
var productSearchInput = $(this).val();
var dataString = 'searchInput='+ productSearchInput;
var script_url = '../ajax/service-search.php';
if(productSearchInput.length > 3 && isProcessing === false) {
$.ajax({
type: 'GET',
url: script_url,
data: dataString,
beforeSend:
function() {
isProcessing = true;
alert('Processing input: ' + productSearchInput;
},
success:
function(server_response) {
$('#searchresultdata').html(server_response).show('fast', function() { alert('Currently processing...'); });
},
error:
function() {
alert('ajax call failed...');
},
complete:
function() {
isProcessing = false;
alert('Processing done');
}
});
}
return false;
});
});
什麼是錯的是,「處理完成」警報之前出現的「等待處理」警報..然後在「處理完成」警報顯示後,顯示「等待處理」警報。
我需要我的HTML server_response顯示,完成呼叫並設置isProcessing =假前; ...
如何做到這一點?
這就是我開始;) 我之所以需要呼叫等待HTML加載,是somtimes我正在掃描條形碼。當我掃描一個條形碼時,HTML在它再次消失之前永遠不會被加載。然後,我可以點擊一個隨機鍵,因爲ajax調用是由鍵盤觸發的 - 然後讀取我掃描的數字。我曾嘗試用ENTER設置barcodescanner作爲終止符,但這一切發生得太快 - 因爲HTML尚未加載。 – EibergDK
也許你可以在jsfiddle上提供更詳細的信息或示例,以便用戶可以重現你的問題?也許'xhr.abort()'或'setTimeout'可以幫助避免過多的Ajax調用/內容重新加載? – Inferpse
如果我做一個簡單的例子,一切都很好...。我加載HTML的.php,當然包括mySQL查詢。我很確定我的ajax調用比我的PHP文件中的mySQL查詢更快完成,這會導致ajax調用在任何HTML返回之前重新開始... – EibergDK