jQueryUI的自动完成功能不理解JSON?

时间:2012-11-20 22:11:25

标签: jquery json jquery-ui

我有这个JSON数组:

[
    {"name":"Mario Kart Wii"},
    {"name":"Super Mario Galaxy 2"},
    {"name":"Super Mario Galaxy"},
    {"name":"Mario Sports Mix"},
    {"name":"Mario & Sonic at the Olympic Winter Games"}
]

非常简单。

我的jQuery代码:

$('#searchFieldGame').autocomplete({
        source: function(request, response) {
            console.log(response)
            $.getJSON('/index.php/search/autocomplete/'+request['term'],response)
        },
        select: function(event, ui) {
            $('#searchFieldGame').val(ui.item.value);
            $('#searchFormGame').submit()
        },
        minLength: 3
    })

我的问题是 - 当JSON更简单时,例如:

[
    "Mario Kart Wii",
    "Super Mario Galaxy 2",
    "Super Mario Galaxy",
    "Mario Sports Mix",
    "Mario & Sonic at the Olympic Winter Games"
 ]

效果很好。但如果它更像是第一个,它就不会得到任何结果。我需要保持它像第一个,因为我想在以后的每个数组中有更多的元素。

2 个答案:

答案 0 :(得分:3)

对于jQuery UI自动完成,只有两种可接受的数据格式。

['item', 'item2', 'item3', ...]
[{label: 'item', value: 'itemvalue'}, {label: 'item2', value: 'itemvalue2'}, ... ]

答案 1 :(得分:1)

如果它是一个对象数组,它必须至少具有值和/或标签属性。 source

[
    {"value":"Mario Kart Wii"},
    {"value":"Super Mario Galaxy 2"},
    {"value":"Super Mario Galaxy"},
    {"value":"Mario Sports Mix"},
    {"value":"Mario & Sonic at the Olympic Winter Games"}
]

如果这不是一个选项,您可以使用$.map来修复它。

$.getJSON('/index.php/search/autocomplete/'+request['term'],function(data){
    response( $.map(data,function(obj) {
        return obj.name;
    }) );
});