来自另一个js函数的JQuery自动完成源代码

我有一个Jquery自动完成函数,其源是根据request.term从另一个函数计算的,所以我无法想出如何设置源属性。

自动完成:

 $( "#finder_city" ).autocomplete({ source: function(request){ var searchParam = request.term; init(searchParam); }, minLength: 2, }); 

我的function:

 function init(query) { //lot of code return response; 

}

我的函数返回有效数据,如response = [ city1, city2, city3 ]; 但自动完成只是启动“加载器图标”,没有任何反应,在日志中没有错误。

任何人都可以说如何从另一个js函数设置源代码?

源函数有两个参数,请求和回调,一旦响应返回,您需要调用回调

 $( document ).ready(function() { $( "#finder_city" ).autocomplete({ source: function(request, callback){ var searchParam = request.term; init(searchParam, callback) }, minLength: 2 }); }); function init(query, callback) { ymaps.geocode(query, { results: 5 }).then(function (res) { var response = []; if (res.geoObjects.get(0) == null) { } else if (res.geoObjects.get(1) == null){ response = [ res.geoObjects.get(0).properties.get('text') ]; } else if (res.geoObjects.get(2) == null){ response = [ res.geoObjects.get(0).properties.get('text'), res.geoObjects.get(1).properties.get('text') ]; } else if (res.geoObjects.get(3) == null){ response = [ res.geoObjects.get(0).properties.get('text'), res.geoObjects.get(1).properties.get('text'), res.geoObjects.get(2).properties.get('text') ]; } else if (res.geoObjects.get(4) == null){ response = [ res.geoObjects.get(0).properties.get('text'), res.geoObjects.get(1).properties.get('text'), res.geoObjects.get(2).properties.get('text'), res.geoObjects.get(3).properties.get('text') ]; } else { response = [ res.geoObjects.get(0).properties.get('text'), res.geoObjects.get(1).properties.get('text'), res.geoObjects.get(2).properties.get('text'), res.geoObjects.get(3).properties.get('text'), res.geoObjects.get(4).properties.get('text') ]; } callback(response); }); } 

演示: 小提琴

在匿名回调中,您需要返回init(searchParam)的返回值。

只是改变:

 init(searchParam); 

至:

 return init(searchParam); 

例:

 source: function (request, response) { // Contains var searchString = request.term, array = []; // OPTIONS array.push('test 1'); array.push('foo'); array.push('var'); response(array); }