我正在使用独立的UI视图。
while
我试图异步查询地址并显示如下建议:
public void start(View view){
try {
Media();// this creates a new object whenever you capture new voice.
media.prepare();
media.start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Registra.setEnabled(false);
Stop.setEnabled(true);
Toast.makeText(getApplicationContext(), "Stai registrando Burlone !!!", Toast.LENGTH_LONG).show();
}
public void stop(View view){
media.stop();
media.release();
media = null;
Stop.setEnabled(false);
Registra.setEnabled(true);
Toast.makeText(getApplicationContext(), "Registrazione Terminata",
Toast.LENGTH_LONG).show();
}
///////////////////////
http://twitter.github.io/typeahead.js/releases/latest/typeahead.jquery.min.js
上述内容并未显示任何建议。如果我在上面或下面放置一个日志语句来调用process(),它就会被执行。但是对流程的呼吁似乎没有做任何事情。
但是,当我使AJAX调用同步并调用process()时,如下所示:
$('#inputBox').typeahead({
hint: true,
highlight: true,
minLength: 3
},
{
name: 'places',
source: evnt.addressSuggest
});
然后我可以看到这些建议。当然,同步请求的问题是UI被阻止。为什么异步版本不起作用?
P.S。我还尝试将数据结构从一个字符串数组更改为类似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');});
},
的内容,正如其他问题的其他一些答案所建议的那样,但这也不起作用。
答案 0 :(得分:1)
我认为你需要使用函数的三个参数版本,例如 函数(query,process,asyncProcess)然后使用第三个参数asyncProcess对数据而不是第二个。
所以你会asyncProcess(data)
代替process(data)
。
答案 1 :(得分:1)
我也无法使用异步远程源来处理typeahead.js,删除了血腥的代码(调用typeahead.jquery.min.js),并为实际工作的typeahead编写了我自己的远程数据源代码。这是我自己的代码完美无缺,除了同步获取数据:typeahead.js ajax remote data source only works with synchronous ajax request
要使此异步,您的数据源函数需要第三个参数,以便在异步请求完成时调用typeahead。您修改后的函数定义如下所示(注意第三个参数):
addressSuggest: function(query, process, process){
添加第三个参数并设置“async:true”将使用async显示结果。以下是解释source
定义中第三个参数需求的文档:https://github.com/twitter/typeahead.js/blob/master/doc/jquery_typeahead.md#datasets