Typeahead有时返回未定义

时间:2015-04-20 01:04:44

标签: javascript php jquery json typeahead.js

我看了一下这个问题的其他一些答案,但它们似乎都不适合我。我有一个使用typeahead的输入字段。它大部分时间都有效,返回正确的值,但有时会返回undefined。这是.js文件:

// Add entry item typeahead configuration
$(document).ready(function() {
    var items = new Bloodhound({
        datumTokenizer: Bloodhound.tokenizers.obj.whitespace("add_entry_item_name"),
        queryTokenizer: Bloodhound.tokenizers.whitespace,
        remote: "items.php?add_entry_item_name=%QUERY"
    });
    items.initialize();
    $("#add_entry_item").typeahead({
        hint: true,
        highlight: true,
        minLength: 2
        }, {
        name: "items",
        displayKey: "item_name",
        source: items.ttAdapter()
    });
});

这是items.php文件:

// Getting an instance of the connection to the database server
$DB = DB::get_instance();

// Setting the header
header("Content-Type: application/json");

// Exiting if nothing is set
if (!isset($_GET["add_entry_item_name"])) {
    echo json_encode([]);
    exit();
}

// Querying the database and JSON encoding the result
echo json_encode($DB->query("SELECT item_ID, item_name FROM mytable WHERE item_name LIKE ?", array("%{$_GET['add_entry_item_name']}%")));

我已经创建了自己的数据库查询功能,这就是您在上面看到的内容。它运作得很好,所以我99%肯定问题出在其他地方......

这是一个示例输出(items.php?add_entry_item_name = tec):

[
    {
        "item_ID": 465,
        "item_name": "Tectonic energy"
    }
]

但是,在输入字段中输入“tec”会返回两个undefined s。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

Bloodhound的datumTokenizer配置错误。它应该是这样的

datumTokenizer: Bloodhound.tokenizers.obj.whitespace("item_name"),

  

datumTokenizer - 具有签名(datum)的函数,可将数据转换为字符串标记数组。

以下是reference,此处为 DEMO

希望这有帮助