typeahead回调无法正常工作

时间:2016-04-05 05:39:25

标签: javascript jquery model-view-controller typeahead

我是Typeahead的新手,无法使用回调。对不起,如果已经询问过,我搜索时找不到确切的问题。

如果记录只是来自带有字符串的变量,而不是来自数据库的记录,那么我有Typeahead工作。我不确定如何正确编码回调。

我们正在使用MVC 6,看起来像是typeahead.js 0.11.1。

工作原理:

var records = [ "Alabama", "Alaska", "Arizona" . . .];

var substringMatcher1 = function (records) {
    return function findMatches(searchString, callback) {

        var matches, substringRegex;
        matches = [];
        substrRegex = new RegExp(searchString, 'i');

        $.each(records, function (index, record) {
            if (substrRegex.test(record)) {
                matches.push(record);
            }
        });

        callback(matches);
    };
};

$('#field1').typeahead({
    hint: true,
    highlight: true,
    minLength: 3
},
{
    name: 'records',
    source: substringMatcher1(records)
});

什么不工作:

var substringMatcher2 = function (records) {
    return function findMatches(searchString, callback) {

        $.ajax({
            url: "/Test/GetRecords/",
            cache: false,
            data: { searchString: searchString },
            type: "POST",
            success: function (data) {

                callback(data);  
            },
            error: function (reponse) {
                alert("error : " + reponse);
            }
        });
    };
};

$('#field2').typeahead({
    hint: true,
    highlight: true,
    minLength: 3
},
{
    name: 'records2',
    source: substringMatcher2()
});

Test / GetRecords根据searchString正确返回过滤后的记录(字符串列表),但页面上没有显示任何内容。我调试了并正确填充了数据。 (data = [New Jersey,New York,...],当searchString为“new”时)

我错过了什么?这种情况是否可行?

任何帮助将不胜感激。

提前致谢!

1 个答案:

答案 0 :(得分:2)

这是更新的代码,使它适用于我,以防它帮助其他人:

var substringMatcher2 = function (records) {
return function findMatches(searchString, processSync, processAsync) {

    $.ajax({
        url: "/Test/GetRecords/",
        cache: false,
        data: { searchString: searchString },
        type: "POST",
        success: function (data) {

            processAsync(data);  
        },
        error: function (reponse) {
            alert("error : " + reponse);
        }
    });
};

};