无法处理异步请求

时间:2019-05-07 13:12:09

标签: jquery typeahead bootstrap-tags-input

我正在尝试创建带有远程源的引导程序标签输入(从服务器获取标签)。当我使用同步请求时,它的效果很好,但是在按下每个字母后屏幕冻结了一段时间,等待AJAX​​完成。而且用户的互联网连接速度越慢,屏幕冻结越多。

我尝试使用文档https://bootstrap-tagsinput.github.io/bootstrap-tagsinput/examples/,但是他们在那里使用了Bloodhound,我已经尝试了几个小时来处理它,但是没有机会。所以我只是决定改用typeaheadjs。

我的jQuery代码如下:

obj.tagsinput({
    tagClass: function (item) {
        return 'cf-tag-' + item.color;
    },
    itemValue: 'id',
    itemText: 'name',
    typeaheadjs: function(query, process = false) {
        tagsFinal = [];

        $.ajax({
                url: tagsInputArgs.ajaxUrl,
                async: false,
                data: {
                        'action': 'get_budget_tags',
                        'security': tagsInputArgs.security,
                        'budget_id': $('.budget_id').val(),
                        'query': query
                },
                type: 'GET',
                cache: true,
                success: function (data) {
                        tagsFinal = data;
                        if (process)
                                process(data);
                }
        });

        //process(tagsFinal);

        return tagsFinal;
    }
});

我从服务器获取的JSON是:

[
    {
        "id":"75",
        "budget_id":"91",
        "name":"electronic",
         "color":"cyan"
    }
]

它在异步设置为false时起作用。如果我将其反转,无论处理数据的数量和位置如何,都不会自动完成。我尝试使用$ .get(),但没有结果。

预期结果是获得相同的自动完成标签输入,但不冻结屏幕(也许自动完成会出现一些延迟,但效果会更好)。

0 个答案:

没有答案