JQueryUI Ajax-вызов с проблемой автозаполнения - правильно ли JSON?Миграция из старого автозаполнения - PullRequest
2 голосов
/ 08 ноября 2011

У меня есть следующая функция, которая использует старое автозаполнение Bassistance:

    $('#searchLocation').autocomplete("/Utils.aspx", {
        dataType: 'json',
        minChars: 2,
        selectFirst: false,
        parse: function (data) {
            var rows = new Array();
            for (var i = 0; i < data.length; i++) {
                rows[i] = { data:data[i], value:data[i], result:data[i] };
            }
            return rows;
        },
        formatItem: function (row, i, n) {
            return row;
        }
    });

Вышеуказанное просто работает, т.е. LI генерируются для каждого результата, а выпадающий список создается непосредственно под входом $ ('#searchLocation ').

Мне нужно перейти на новое автозаполнение пользовательского интерфейса jQuery, и у меня пока есть следующее:

$("#searchLocation").autocomplete({
        source: function( request, response ) {
            var area = $("#searchLocation").val();
            $.ajax({
                url: "/Utils.aspx",
                dataType: "json",
                data: {'q':area},
                success: function (data) {
                    console.log(data);
                    var rows = new Array();
                    for (var i = 0; i < data.length; i++) {
                        rows[i] = { data:data[i], value:data[i], result:data[i] };
                    }
                    return rows;
                }
            });
        },
        minLength: 2
    });

Данные / JSON отображаются как:

["CM23 ","CM23 1 ","CM23 2 ","CM23 3 ","CM23 4 ","CM23 5 "]

Однако UL не заполняется LI.Там нет ошибки - это просто не работает.

Чего мне не хватает - мне нужно написать код, который создает LI?Я попробовал следующее, но это не работает:

    .data( "autocomplete" )._renderItem = function( ul, item ) {
        return $( "<li></li>" )
        .data( "item.autocomplete", item )
        .append( "<a>" + row + "</a>" )
        .appendTo( ul );
    }; 

Любая помощь была бы фантастической.

1 Ответ

2 голосов
/ 08 ноября 2011

Поскольку ваш удаленный метод возвращает данные в виде массива строк, следующее должно работать нормально (без постобработки):

$("#searchLocation").autocomplete({
        source: function( request, response ) {
            $.ajax({
                url: "/Utils.aspx",
                dataType: "json",
                data: {'q':request.term},
                success: response
            });
        },
        minLength: 2
});

Ключ вызывает переданную функцию response в вашем методе успеха AJAX (поскольку вам не нужна постобработка, вы можете напрямую использовать функцию response в качестве метода успеха AJAX).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...