javascript - twitter typeahead.js process() 调用无法异步工作

标签 javascript asynchronous typeahead.js

我正在使用独立的 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/

相关文章:

javascript - 添加一个书签,它只是 javascript,不是 URL

javascript - 未终止字符串文字的常见来源

c# - 在异步任务仍在使用时处置流

javascript - 在 Node 中使用 fs.readFile 串联读取文件?

javascript - 异步函数try catch block 是否可以包装称为异步函数,这也可能引发错误?

javascript - 无法接收目标文件 Typeahead.js 中的值

javascript - Typeahead.js Bloodhound 忽略高质量结果

javascript - 探索 JS on Object.assign 文本中的勘误表?

javascript - nodejs中JSON数据类型的转换方法

typeahead.js - 为什么 React.js 不能与 Twitter 的 Typeahead 库一起使用