Как вы используете POST с автозаполнением jQuery?

jQuery v1.2.6

Плагин jQuery.autocompleter v1.1pre (с веб-сайта jQuery)

Я не могу отправить «тип: «POST»» обратно в свой веб-сервис. Я не могу заставить его распознаваться автозаполнением. Мысли?

Этот код ниже работает нормально, пока я ищу строку запроса «q». Но я хотел бы использовать это для более продвинутых функций в будущем, передавая больше параметров, и был бы признателен, как отправлять сообщения с помощью автозаполнения.

Я знаю об опции extraParams. Но это дополнительные параметры, которые передаются через GET или POST (если мы сможем заставить POST работать). Это не меняет его для отправки в виде POST.

$(function() {
    $('#searchBox').autocomplete(
        "/services/college.asmx/lookupColleges",
        {
            delay: 5,
            minChars: 1,
            matchSubset: 1,
            matchContains: 1,
            cacheLength: 10,
            autoFill: false,
            dataType: 'json',
            parse: function(data) {
                var rows = new Array();
                for (var i = 0; i < data.length; i++) {
                    rows[i] = {
                        data: data[i]
                        , value: data[i].Data
                        , result: data[i].Name
                    };
                }
                return rows;
            },
            formatItem: function(row, i, n) {
                return row.Name;
            }
        }).result(function(event, row) {
            processSelection(this, row.Data);
        });
});

Я попытался добавить параметр для POST, как указано в примере кода ниже. Но он по-прежнему отправляется как GET.

delay: 5,
minChars: 1,
matchSubset: 1,
matchContains: 1,
cacheLength: 10,
autoFill: false,
dataType: 'json',
type: 'POST',

Любая помощь приветствуется.

Благодарю вас!

PS, многое из этого недокументировано, и это было PITA, чтобы выяснить это после проб и ошибок. Слава Богу за Firebug.

Вы заметите, что я:

  • получение JSON от веб-сервиса
  • Автозаполнение не может обрабатывать JSON изначально, поэтому мне нужно разобрать его в свой собственный массив.
  • Поскольку теперь я возвращаю пользовательский объект массива, необходимо перезаписать formatItem, чтобы обработать новый объект массива для целей отображения.
  • И, наконец, снятие денег. Я хочу обработать дополнительные данные в этой строке после того, как пользователь выберет строку (щелчок мышью, клавиша TAB или ENTER). Я делаю это с помощью делегата result().

Я действительно надеюсь, что приведенный выше код поможет другим в будущем разобраться с автозаполнением, а также всем, что требует обратного проектирования.

Совет: Имена свойств data[i].Data и data[i].Name — это имена свойств JSON.


person eduncan911    schedule 11.07.2009    source источник


Ответы (2)


В настоящее время (Autocompleter 1.1pre) нет способа отправить его без изменения кода плагина.

Я просто оставил его для отправки строк запросов. Спасибо всем за ответы, я поднял голос.

person eduncan911    schedule 12.08.2009

Вы можете установить по умолчанию для «всех» вызовов jquery ajax сообщения, а затем просто переопределить их в любом сценарии, который вы хотите. Переопределение, вероятно, сработает и для этого... Попробуйте разместить это в верхней части кода:

$.ajaxSetup({
    type: 'POST'
});

Вы можете использовать вызов $.ajaxSetup(), чтобы установить значения по умолчанию для любой из обычных опций $.ajax / $.post / $.get. Надеюсь, это поможет.

person KyleFarris    schedule 11.07.2009
comment
Я попробую это позже на этой неделе, когда вернусь к этой задаче (поскольку пока она работает, используя GET). Я дам вам знать. - person eduncan911; 13.07.2009
comment
Это не работает. Планируется, что автозаполнение будет включено в более позднюю версию jQuery, в которой они говорят об изменении внутренней работы. Надеюсь, для поддержки AJAX. Я только что перешел на использование строк запросов. - person eduncan911; 12.08.2009