Возврат объекта JSON из сервлета Java, запрошенного источником виджета автозаполнения пользовательского интерфейса jQuery - PullRequest
1 голос
/ 21 декабря 2011

Хотя заголовок может быть либо слишком конкретным, либо слишком расплывчатым, у меня есть вопрос относительно того, что виджет автозаполнения отправляет моему сервлету, когда он пытается получить объект JSON.Опция источника автозаполнения позволяет мне указать URL, в данном случае мой сервлет, где он ожидает, что будет возвращен объект JSON.К сожалению, документация по автозаполнению пользовательского интерфейса jQuery немного запутала меня:

Когда используется строка, плагин автозаполнения ожидает, что эта строка будет указывать на ресурс URL, который будет возвращать данные JSON.Это может быть на том же хосте или на другом (должен предоставить JSONP).Параметр запроса "term" добавляется к этому URL.

Теперь, означает ли это, что если бы URL моего сервлета был что-то вроде: "MyServlet", новый URL был бы "MyServlet?term«?Я отправляю несколько запросов AJAX этому сервлету и обычно расшифровываю, какую процедуру мне следует выполнять с каждым, основываясь на параметре «команда», который я публикую с каждым запросом AJAX.Итак, когда Autocomplete делает запрос к моему сервлету, что именно я проверяю, чтобы узнать, запрашивает ли он именно этот JSON?Для каждого другого запроса я делаю что-то вроде этого:

if(request.getParameter("command").equals("getUsers") {
    // Code to handle Getting Users...
} else if(request.getParameter("command").equals("getEvents") {
    // Code to handle Getting Events...
} else if(request.getParameter("command").equals("getBugs") {
    // Code to handle Getting Bugs...
}

Как проверить, поступает ли запрос от автозаполнения?Могу ли я пометить этот параметр «command» на URL, который я передаю в источник, вроде «MyServlet?command=autocomplete», чтобы сообщить об этом, или это вообще необходимо?

EDIT : Таким образом, после перечитывания документации фактически звучит так, как будто строка, ссылающаяся на URL-адрес, поскольку источник будет в основном делать запрос к этому источнику каждый раз, когда выполняет поиск, и этот параметр «term»просто несет то, что было в окне поиска, когда это началось.Другими словами, означает ли это, что он не просто загружает JSON из всех возможных терминов, а просто использует его как массив?Скорее, он идет за выборками при каждом поиске?

1 Ответ

0 голосов
/ 21 декабря 2011

на самом деле это звучит так, как будто использование строки, ссылающейся на URL, поскольку источник будет в основном делать запрос к этому источнику каждый раз, когда он выполняет поиск, и этот параметр «term» просто переносит то, что было в окне поиска, когда он начинался. Другими словами, означает ли это, что он не просто загружает JSON всех возможных терминов, а просто использует его как массив? Скорее, он идет за выборками при каждом поиске?

Да, это правильно. Когда вы используете удаленный источник, вы несете ответственность за фильтрацию перед отправкой кандидатов на автозаполнение.

Проверьте удаленные демонстрации на странице демонстраций автозаполнения jQueryUI. Посмотрите в firebug, как запросы выполняются, чтобы увидеть, как выглядит запрос.

Если вам необходимо отправить дополнительные параметры вместе с запросом, вы можете передать функцию в опцию source и сделать свой собственный запрос AJAX:

$("...").autocomplete({ 
    source: function (request, response) {
        $.ajax({
            data: { term: request.term, command: 'autocomplete' },
            /* other options */
            success: response
        });
    }
});

Использование этого метода в основном позволяет вам предоставить любой произвольный источник данных, который вы хотите. Ключевыми частями являются обратный вызов response с кандидатами для автозаполнения и получение искомого термина с использованием request.term.

...