Как перенаправить браузер после поста json с помощью go и javascript? - PullRequest
0 голосов
/ 08 октября 2019

Мы пытаемся отправить форму HTML в формате JSON в код GO. Мы уже достигли этого, но теперь мы сбиты с толку, потому что мы не можем заставить браузер перенаправить на соответствующую веб-страницу. Инструкция перенаправления отлично работает, отправляя JSON непосредственно в Insomnia (она возвращает состояние успеха и отображает новую страницу), но не в браузере. Возможно, нам не хватает некоторого кода, но мы не можем найти то, что нам не хватает. Пожалуйста, помогите.

Код javascript, который отправляет json:

  jQuery(document).on('submit', '#login', function(event){
        event.preventDefault();

        jQuery.ajax({
            url: '/login/',
            type: 'POST',
            dataType: 'json',
            data: JSON.stringify($(this).serializeFormJSON())
        })
        .done(function(response){
            location.href = 'response';
        })
        .fail(function(resp){
            console.log("resp");
        })
        .always(function(){
            console.log("complete");
        })
    });

Код Go, который проверяет эту форму:

    func POSTLoginHandler(w http.ResponseWriter, r *http.Request) {
        var user users.User
        err := json.NewDecoder(r.Body).Decode(&user)
        if err != nil {
            w.WriteHeader(http.StatusBadRequest)
        } else {
            validCredentials, err := users.ValidarCredenciales(user)
            if err != nil {
                w.WriteHeader(http.StatusInternalServerError)
            } else if validCredentials {
                err = cookies.GenerarCookie(w, r, user.Email)
                if err != nil {
                    w.WriteHeader(http.StatusInternalServerError)
                } else {
                    http.Redirect(w, r, "/dashboard/", http.StatusSeeOther)
                }
            } else {
                http.Redirect(w, r, "/forbidden/", http.StatusSeeOther)
            }
        }
    }


    func GetDashboardUser(w http.ResponseWriter, r *http.Request) {
        exists, err := cookies.VerifyCookie(r)
        if err != nil {
            w.WriteHeader(http.StatusInternalServerError)
        } else if exists {
            http.ServeFile(w, r, "static/template.html")
        } else {
            http.Redirect(w, r, "/", http.StatusSeeOther)
        }
    }

1 Ответ

1 голос
/ 08 октября 2019

Когда вы отправляете запрос AJAX, это все JavaScript, а не страница, которую видит пользователь. Поэтому, когда ваш AJAX-запрос получает ответ о перенаправлении, это AJAX-запрос, который перенаправляется. Страница, которую видит пользователь, будет перенаправлена, только если URL-адрес, по которому они переходят, возвращает перенаправление. Если вы хотите, чтобы JavaScript изменил страницу браузера, вам нужно написать JS, чтобы он это делал, это не произойдет автоматически.

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