我有一个如下所示的自动完成代码。它从ajax成功得到了正确的响应,但我不能在它下面的grep函数上使用响应变量。它说这是未定义的。如果我要使用全局变量,这种情况也是有效的。如何才能看到响应变量?
$( ".skl" ).autocomplete({
source: function(req, responseFn)
{
var re = $.ui.autocomplete.escapeRegex(req.term);
var matcher = new RegExp( "^" + re, "i");
var matcher2 = new RegExp( " " + re, "i" );
$.ajax({
type: 'POST',
url: "http://somepage",
data: { skillType: 1, skillName: re},
success: function( response){
console.log(response);
}
});
var a = $.grep( availableTags, function(item,index){
return matcher.test((item)) || matcher2.test(item);
});
//var results = $.ui.autocomplete.filter(availableTags, req.term);
responseFn( a.slice( 0,5) );
},
minLength: 1,
autoFocus: true
});
答案 0 :(得分:1)
ajax
是异步的。这意味着它会在加载内容之前立即继续运行您的代码(这是一件非常好的事情)。
您需要在成功函数中移动grep
代码以及其他任何使用结果的代码。 A"睡眠"函数(这样的东西在JavaScript中不存在,所以我怀疑)对你没有帮助,因为在当前函数完成执行之前,JavaScript不会运行它的排队事件。这意味着ajax在仍然运行autocomplete
功能时已经完成了不可能,即使你忙着(这是一件非常可怕的事情)。< / p>
由于您似乎需要响应以便在source
函数中返回值,因此您需要更改您对事物进行思考的方式。例如,可以在内容更改时发送请求,并且其success
函数将触发更新列表的项目。这也更具概念意义。