JQuery Ajax-запрос к Grails Controller не работает - PullRequest
0 голосов
/ 04 января 2012

В следующем «простом» примере входа в Ajax я использую JQuery для отправки параметров формы на контроллер Grail. Однако фактический URL-адрес не совпадает с URL-адресом контроллера, настроенным в вызове ajax.

Html:

<div id="loginForm">
        <div id="ajaxLoginError">
        </div>
        <form name="ajaxLoginForm" action="ajaxLogin" id="ajaxLoginForm">
            <span class="pic"></span>
            <span class="close"></span>
            <input type="text" name="username" class="text focus" default="Username"
                value="${user?.username}" />
            <input type="password" name="password" class="text focus"
                default="Password" value="${user?.password}" />
            <button type="submit" name="login" id="ajaxLoginBtn">
                <span class="button"><span>Login</span> </span>
            </button>
            <label> <input type="checkbox" class="check" name="remember" />Remember
                me</label>
            <a href="#">Forgot username or password?</a>
        </form>
    </div>

Javascript:

$('#ajaxLoginBtn').click(function() {
    $('#ajaxLoginError').fadeOut();
    $.ajax({
        url: "${createLink(controller: 'user', action: 'ajaxLogin')}",
        type: 'GET',
        data: queryString,
        dataType: 'json',
        success: function(data) {
            if (data.isAuthenticated) {
                // Display user bar
                $('#loginUserBar').slideDown();
            }else {
                $('#ajaxLoginError').html(data.errorMsg).fadeOut();
            }
        }
    });
});

Кроме того, кто-нибудь может проверить логику моего контроллера. Я так понимаю, это правильный способ анализа ответа JSON?

Сервер:

def ajaxLogin = {
    boolean isExists = false
    String errorMsg = ""
    def foundUser = User.findByEmailAndPassword(params.username, params.password) 
    if (foundUser) {
        isExists = true
    }else {
        errorMsg = "Login unsuccessful! Either the username, or password entered is incorrect."
    }
    render(content: 'text/json',
        loginResponse(isAuthenticated: isExists, errorMsg: errorMsg));
}

Аналогичным образом, нужно ли что-то делать, чтобы заставить Grails явно использовать JQuery в качестве основного плагина javascript?

1 Ответ

1 голос
/ 04 января 2012

Есть много разных вопросов ...: -)

1) Есть ли что-то, что мне нужно сделать, чтобы заставить Grails явно использовать JQuery в качестве основного плагина javascript?

Установите плагин jquery, если он еще не установлен.Вы также можете поместить

<g:setProvider library="jquery"/>

в начале вашего GSP (или в вашем макете), чтобы явно установить JQuery в качестве провайдера

2), это правильный способ анализа JSON.ответ?

    log.info("Receive send request");
    def contentType = request.getHeader('Content-Type')
    log.trace("receive with ContentType: " + contentType)
    if (contentType && contentType.contains('application/json')) {            
        def results = request.JSON
        log.info("results received : ${results}")
    }

Вы можете добавить if (request.xhr){} для проверки вызовов ajax

3) Кто-нибудь может проверить логику моего контроллера.

Ничего не скажешь о логикесам вы проверяете существующий логин / пароль

4) фактический URL не совпадает с URL контроллера, настроенным в вызове ajax.

Сложно ответить только тем, что вы нам сообщили.Вызов aQax jQuery кажется хорошим, но мы ничего не знаем о содержании вашего queryString.Я обычно использую $("#myForm").serialize() для отправки формы контроллерам, хотя я не понимаю вашей проблемы с URL-адресами ...

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