Как автоматически заполнять поля из запроса ajax при весенней загрузке? - PullRequest
0 голосов
/ 10 июля 2019

Я сделал ajax-запрос к серверу для проверки, существует ли конкретное имя пользователя в базе данных.Вот код для этого ..

$("input[placeholder='Username']").focusout(function() {
        var username = $("input[placeholder='Username']").val();
        if(username.length <3 || username.length>20) {
            $("#username_taken").html("Username must be between 3-20 characters!");
            usernameFlag = true;
        }
        else if(username != null) {
            $.ajax({
                type: "POST",
                url: "/data/validate_username",
                data: username,
                success: function(isValid) {
                    if(!isValid) {
                        $("#username_taken").html("The username has already been taken!");
                        usernameFlag = true;
                    }
                },
                error: function() {
                    $("#username_taken").html("Could not verify username from server!");
                }
            });
        }
    });

На стороне сервера я написал RestController для обработки этого запроса и предоставления данных о том, существует ли пользователь или нет.

// necessary imports done...

@RequestMapping("/data")
@RestController
public class UserAccountRest {

    @Autowired
    private UserAccountService userAccountService;

    @PostMapping("/validate_username")
    public boolean validateUsername(String username) {
        return !userAccountService.accountExists(new UserAccount(username));
    }
}

Обычно Spring автоматически заполняет параметры, такие как имя пользователя, если это была форма отправки.Но здесь возникает состояние 500 Internal Server Error, и в консоли говорится, что id не должен быть нулевым.Это означает, что имя пользователя не заполнено.

Возможно, я мог бы использовать объект HttpRequest в параметре и получить из него имя пользователя.Но есть ли способ настроить так, чтобы имя пользователя заполнялось напрямую?

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Вы пытались сделать

 public boolean validateUsername(@RequestBody String username) {
        return !userAccountService.accountExists(new UserAccount(username));
    }

Возможно, вы публикуете значение JSON, которое должно быть парой ключ-значение.

0 голосов
/ 10 июля 2019

В отправляемых данных должны быть пары ключ / значение.

Когда вы получаете значение <input>, у вас есть только 1/2 пары. Ваша переменная username содержит только часть значения

Изменение

data: username,

К

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