變量ajaxdata在成功函數中被修改,如果還沒有完成,我想等待2秒,然後繼續沒有它。有條件暫停Javascript等待ajax
該用例用於jqueryui自動填充字段。自動完成源是一個ajax請求,但如果用戶鍵入的速度很快,並且在列表加載之前退出該字段,則該字段將保持未設置狀態。在自動完成上使用'change'事件我檢查用戶是否在未選中的情況下輸入了有效的選項,但是如果在更改事件觸發時尚未加載源,則這不起作用。因此,如果源(存儲在變量'ajaxdata'中)爲空,我想延遲更改函數等待。
代碼:
input.autocomplete({
source: function (request, response){
$.ajax(
{
type: "GET",
url: "/some/url",
dataType: "json",
success: function(data){
response($.map(data,function(item){
return{
label: item.label,
value: item.value
}
}));
ajaxdata = data;
}
}
);
// ajaxopts = ajaxsource(request,response,ajaxurl,xtraqry)
},
change: function(event, ui) {
if (!ui.item) {
// user didn't select an option, but what they typed may still match
var enteredString = $(this).val();
var stringMatch = false;
if (ajaxdata.length==0){
/// THIS IS WHERE I NEED A 2 SECOND DELAY
}
var opts = ajaxdata;
for (var i=0; i < opts.length; i++){
if(opts[i].label.toLowerCase() == enteredString.toLowerCase()){
$(this).val(opts[i].label);// corrects any incorrect case
stringMatch = true;
break;
}
}
}
},
});
編輯:
更具體地講這個問題:這種延時必須是有條件的。這意味着如果數據已經被加載(或者因爲它來自靜態源,或者來自早期的Ajax調用),我不希望有延遲。
你不需要兩秒鐘的延遲(順便說一句,用setTimeout很容易實現),你需要等到ajax調用完成! – adeneo
您是否嘗試過使用'$ .ajax()'的'beforeSend:'或'complete:'設置?您可以綁定要在HTTP請求發送和完成之前執行的函數。 – Twisty
看到這可以幫助你想要達到的目標。 http://www.w3schools.com/js/tryit.asp?filename=tryjs_timing1 – Jai