变量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