Я чрезвычайно новичок в jQuery и AJAX, однако после 7 часов чтения учебников и игры с кодом, я хорошо понимаю, как именно они работают.Это то, что я пытаюсь сделать ....
У меня есть веб-приложение, которое позволяет пользователю зарегистрироваться на сайте.Я хотел бы, чтобы имя пользователя, которое они вводят (на странице регистрации), проверялось асинхронно на наличие в базе данных.Кажется, довольно просто, но мне не повезло.
Это jQuery, который я написал ....
$(document).ready(function() {
$("a").click(function(){
alert("Should be going to servlet now");
$.ajax({
type: 'GET',
url: "checkName",
data: {userName: "Hexose"},
success: function(data){ alert(data);}
});
});
});
Я сейчас использую статические данные для отладки, так как у меня возникла другая проблема при получении значения из поля формы,Я также не совсем понимаю успех: функциональная часть, что такое «данные» как параметр функции?Это входит в ответ?
Теперь у меня есть сервлет, сопоставленный с «checkName», и сервлет работает (я отлаживал и передавал параметр по URL).Вот код сервлета ...
public class CheckUserNameServlet extends HttpServlet {
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
String targetUN = request.getParameter("userName");
if (data.UserDB.userNameExists(targetUN)) {
String exists = "Username already taken...";
response.setContentType("text");
response.setHeader("Cache-Control", "no-cache");
response.getWriter().write(exists);
response.setStatus(200);
} else {
response.getWriter().write("Username is available...");
}
}
}
Я знаю, что мой вызов базы данных возвращает то, что мне нужно, но я подозреваю, что в этом сервлете что-то не так.И для хорошей меры здесь есть элемент, откуда должны поступать данные
<tr>
<td align="right">Username:</td>
<td><input type="text" name="userName" id="userName" value="${user.userName}" /</td>
<td><span id="exist"> <a href="">Check Availability</a></span></td>
</tr>
Так что, по сути, мои вопросы таковы: 1. Правильно ли я использую jQuery, использую .ajax иэтажерка?Есть ли более простой способ сделать это или другой метод, который чище?2. Что-то не так в моем сервлете?Я чувствую, что ответ неправильный или я неправильно его кодировал.3. Как мне получить значение из элемента userName?Я использовал $ ("# userName"). Val (), и он всегда дает и пустую строку или ноль.
Любые указатели, подсказки или что-либо в этом месте будут очень оценены,Я отчасти схожу с ума по этому вопросу.Кроме того, если я не согласен с любым из этих вопросов, не стесняйтесь просто указать мне хороший учебник.
Заранее спасибо.
РЕДАКТИРОВАТЬ: Таким образом, идентификатор элемента userName была моей проблемой.Я изменил ID, и теперь все работает.Один дополнительный вопрос, хотя.Есть ли способ остановить отправку формы, если ответ возвращается и говорит, что имя пользователя занято?