当数据来自数据库时,自动完成jquery插件不起作用?

时间:2016-10-17 19:55:12

标签: c# jquery asp.net json autocomplete

我正在使用此插件进行textarea建议(自动完成)。只要列表是硬编码的,它就可以正常工作。像这样: -

  

var suggest = [“Action”,“ActionScript”,“Borland”];

但我需要数据库中的单词列表。当我从数据库获取列表时,插件不响应。这就是我在做的事情: -

我使用的插件: -

  

https://github.com/imankulov/asuggest/

Jquery的: -

list.Select(i => i).Aggregate((i, j) => i + (list.IndexOf(j) == list.Count -1 ? " and "  :  " , ") + j);

代码背后: -

$(document).ready(function() {
        var suggests = getList();
        var $txt = $('#<%=txtArea.ClientID %>');
        $txt.asuggest(suggests);
    });

function getList() {
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "ajaxService.asmx/autocompletelist",
        data: "{groupUid:'" + 4 + "', clientUid: '" + 8 + "'}",
        dataType: "json",
        success: function(data) {
            return (data.d);
        },
        error: function(result) {
            alert("No Match");
        }
    });
}

请建议?它与方括号有关吗?如何从数据库中获得回报?

2 个答案:

答案 0 :(得分:1)

ajax success函数是异步执行的(在收到响应之前它不会被触发),但是你试图以同步的方式使用它的结果。因此,当您致电$txt.asuggest(suggests);时,没有任何结果,因为尚未填充suggests。这是因为ajax请求尚未完成,但您的代码不知道。解决此问题的最简单方法是将UI的逻辑放在success方法本身中。这样,在保证填充suggests变量之前,不会调用您的插件。试试这个:

$(document).ready(function() {
    getList();
});

function getList() {
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "ajaxService.asmx/autocompletelist",
        data: "{groupUid:'" + 4 + "', clientUid: '" + 8 + "'}",
        dataType: "json",
        success: function(data) {
            var $txt = $('#<%=txtArea.ClientID %>');
            $txt.asuggest(data);
        },
        error: function(result) {
            alert("No Match");
        }
    });
}

答案 1 :(得分:0)

您可以先执行此操作 alert(建议),检查结果是否正确,然后将结果转换为数组。 将json转换为数组:

var dataArray=eval(jsonStr);
for(var i in dataArray)
{
    //TODO
}