Вам нужно записать его в тело ответа, а не устанавливать его как атрибут запроса.
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(new Gson().toJson(usernamesList));
Таким образом, запрос Ajax к этому сервлету получает ответ JSON, который затем может быть пройден обычным способом с использованием JavaScript.
Тем не менее, если ваша единственная цель - проверить, доступно ли имя пользователя, то вы также можете подойти к этому немного по-другому. Вместо того, чтобы качать весь список всех имен пользователей по сети и выполнять проверку на стороне JavaScript, вы также можете просто отправить введенное имя пользователя в качестве параметра запроса сервлету и позволить БД выполнить проверить задание и вернуть только логическое значение true
или false
, если имя использования доступно. Например,
String username = request.getParameter("username");
boolean usernameAvailable = studentService.usernameAvailable(username);
Map<String, Object> data = new HashMap<String, Object>();
data.put("usernameAvailable", usernameAvailable);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(new Gson().toJson(data));
с
$.get('someservlet', { 'username': username }, function(data) {
if (!data.usernameAvailable) {
$('#somemessage').text('Username is not available, please choose another').show();
}
});
Это более эффективно для полосы пропускания и менее подвержено утечке конфиденциальной информации.
Смотри также: