Spring MVC - ответ JSON - Как предотвратить - PullRequest
1 голос
/ 26 октября 2011

У меня есть поле формы предварительного просмотра, которое ищет записи о людях на основе полей имени и фамилии. Поля публикуются с помощью Jquery, а список лиц возвращается в виде JSON, а результаты отображаются в виде таблицы. Запрос на отправку отправляется для каждого события keyup. Но у меня проблема с этим.

Допустим, пользователь ввел 'a' в поле имени. Запрос подается как ajax call. Затем пользователь вводит «b» в поле. Теперь запрос снова отправляется с именем ab в качестве имени. Проблема в том, что у 'ab' меньше результатов, поэтому результаты отображаются мгновенно. Поскольку у «а» больше результатов, требуется некоторое время для обработки и построения таблицы результатов, и как только это будет сделано, она заменит существующую таблицу на «ab». Это не то поведение, которое мне нужно, так как «а» был первым запросом, а «ab» - последним, его нельзя смещать. Так как я могу предотвратить результаты от старого запроса, смещающего новые результаты. Заранее спасибо!

--- Update ---

метод контроллера это что-то вроде ..

 public @ResponseBody List<PSPerson> getPersonsWithNames(
        @RequestParam("firstName") String firstName, @RequestParam("lastName") String lastName) 
{

    Map<String, String> attrMap = new HashMap<String, String>();

    attrMap.put("firstName", firstName);
    attrMap.put("lastName", lastName);

    return personService.getPeople(attrMap);
}

Ответы [ 2 ]

0 голосов
/ 26 октября 2011

У многих форм предварительного просмотра / автозаполнения, которые вы видите в Интернете, есть «пороговое количество» символов (например, в PengoWorks jQuery Autocomplete это minChars,). Если вы используете этот плагин jQuery, вы также можете использовать опцию delay, чтобы указать количество миллисекунд ожидания до отправки запроса AJAX.

Если вы используете типичное значение minChars, такое как 3, плюс разумное значение delay, возможно, 100 мс, вы, вероятно, «сузили» пространство поиска настолько, чтобы не было проблем с одним набором результатов ». обгон "другого".

Вы можете попробовать поиграть с этими значениями здесь .

Редактировать: те же опции доступны в jQueryUI - они называются minLength и delay.

0 голосов
/ 26 октября 2011

Может быть, вы можете добавить метку времени к возвращенным значениям Json.И в своем jquery сравните последнюю полученную временную отметку с фактической.

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