twitter typeahead.js process()调用不能异步工作

时间:2015-05-25 21:21:33

标签: javascript asynchronous typeahead.js

我正在使用独立的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');}); }, 的内容,正如其他问题的其他一些答案所建议的那样,但这也不起作用。

2 个答案:

答案 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