Я пытаюсь выполнить проверку в реальном времени при регистрации, чтобы пользователи могли видеть, было ли уже занято их имя пользователя или нет. Каждый раз, когда они печатают, я использую jquery для отправки запроса на получение моему контроллеру, который запускает запрос, чтобы проверить, занято ли их имя. Он возвращает «0», если это не так, и «1», если это так. Когда я запускаю метод get, я получаю только состояние готовности 1. Однако внутри этого readyState я вижу, что responseText, который он дает, является правильным. Я уже пробовал получить доступ к responseText, но безуспешно. Прикреплю картинку лога.Изображение журнала, которое я получаю в ответ
$(document).ready(() => {
$("#usernameTaken").hide();
function checkPassword() {
let usernameGiven = $("#username").val();
return $.get( "/getString", {username: usernameGiven})
.done((data) => data)
}
$('#username').on('input', () => {
console.info(checkPassword());
});
});
Мой Контроллер
@RestController
public class TestController {
private Users userRepo;
public TestController(Users userRepo) {
this.userRepo = userRepo;
}
@GetMapping("/getString")
public String getString(@RequestParam(name = "username") String username) {
String count = String.valueOf(userRepo.checkForUsername(username));
return JSONObject.quote(count);
}
}
Извините, но я не могу вас достать. Чего вы хотите достичь и с какой проблемой сталкиваетесь? Ожидаете ли вы ценности от вашего ответа от веб-сервиса в переменной readyState?
мой контроллер возвращает строку, которая позволяет мне узнать, занято ли это имя уже или нет. Я хочу вытащить responseText, который вы можете видеть в журнале, который я связал с моим вопросом og. Однако я не могу этого сделать.
Вы можете увидеть правильный ответ вашего контроллера в responseText (на прикрепленном вами изображении журнала). Это строка "0". Но jQuery.get асинхронный, т.е. вы получаете данные в обработчике .done(...); но вы используете результат checkPassword синхронно.
Большое спасибо, я считаю, что исправил это, просто добавив .then () после вызова функции checkPassword при изменении ввода.
@matt, который работает, потому что jQuery.get возвращает jqXHR, поэтому в основном то, что jQuery вызывает отложенный. Таким образом, вы используете API асинхронно, но .then вызывается всегда в случае неудачи или успеха. Проверьте методы .done и .fail, чтобы различать их. (API jQuery deferred немного отличается от Обещания JavaScript.)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Что вы видите в консоли для сетевых запросов?