我正在使用独立的 UI View 。
http://twitter.github.io/typeahead.js/releases/latest/typeahead.jquery.min.js
我正在尝试异步查询地址并显示如下建议:
$('#inputBox').typeahead({
hint: true,
highlight: true,
minLength: 3
},
{
name: 'places',
source: evnt.addressSuggest
});
////////////////////////
addressSuggest: function(query, process){
$.ajax({
type: "GET",
url: "https://XXXXXX",
data: {
prefix: query,
},
dataType: 'json',
}).done(function(data){
var suggestions = data.suggestions;
var onlyText = $.map(suggestions, function(n, i){ return n.text; });
process(onlyText);
})
.error(function(){alert('an error occurred');});
},
上面没有显示任何建议。如果我将日志语句放在调用 process() 的上方或下方,它就会被执行。但对 process 的调用似乎没有执行任何操作。
但是当我使 AJAX 调用同步并调用 process() 时,如下所示:
addressSuggest: function(query, process){
var onlyText;
$.ajax({
type: "GET",
url: "https://XXXXXX",
data: {
prefix: query,
},
dataType: 'json',
async: false
}).done(function(data){
var suggestions = data.suggestions;
onlyText = $.map(suggestions, function(n, i){ return n.text; });
})
.error(function(){alert('an error occurred');});
process(onlyText);
},
然后我就可以看到建议了。当然,同步请求的问题是 UI 被阻塞。为什么异步版本不起作用?
附注我还尝试将数据结构从字符串数组更改为 [{'value': 'first'}, {'value': 'second'}, {'value': 'third'}]
正如其他问题的一些其他答案所建议的,但这也不起作用。
最佳答案
我认为你需要使用该函数的三个参数版本,例如 函数(query、process、asyncProcess),然后在数据上使用第三个参数 asyncProcess 而不是第二个。
所以你会做asyncProcess(data)
而不是process(data)
。
关于javascript - twitter typeahead.js process() 调用无法异步工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30446170/