I have func in Go (I have removed all error handling to make this short)
func PostLoginAjax(w http.ResponseWriter, r *http.Request) {
    if r.Method == "POST" {
        userEmail := r.FormValue("Email")
        userPassword := r.FormValue("Password")
        db := r.Context().Value( "db").(*sqlx.DB)
        sessionStore := r.Context().Value( "sessionStore").(sessions.Store)
        u := models.NewUser(db)
        user, err := u.GetUserByEmailAndPassword(nil, userEmail, userPassword)
        session, _ := sessionStore.Get(r, "superadmin-session")
        session.Values["user"] = user
        err = session.Save(r, w)
        log.Info("All Success, redirecting to: ", "/")
        w.Header().Set("Location", "/")
        w.WriteHeader(http.StatusFound)
    }
}
Below is the snippet from template which is being used
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script>
        $(document).ready(function(){
            $("#login-submit").on('click', function(){
                $.ajaxSetup({async: true, cache: false});
                $.ajax({
                    url: '/login', // url where to submit the request
                    type : "POST", // type of action POST || GET
                    data : $("#form-login").serialize(), // post data || get data
                    success: function (response, status, xhr) {
                        console.log("success");
                        console.log(status);
                        console.log(xhr);
                        console.log(response);
                        },
                    error: function (errMsg) {
                        console.log("error");
                        console.log(errMsg);
                        $("#formErrorMessage").html(errMsg);
                    },
                    complete: function(resp) {
                        console.log("complete");
                        console.log(resp);
                    }
                })
            });
        });
</script>
If I just the code shown above and when I click "Login" button and I go and check in console logs I see something like show below
Things which I do not understand is why the page is not redirected as in the Network tab of devtools I see the status is 302 and in console log I see status 200. Why this difference. When I just simply refresh the page, it perfectly works fine and takes me to the logged in page and from there I have to logout to test again.
How can I actually make this work, like submit form using ajax and then redirect if email and password are verified.
If I remove the below line from the func, the response is handled by the error part of ajax and same thing happens, I get the complete HTML in response text in console log and the #formErrorMessage actually shows the HTML (parsed) with all images and text. When I just simply refresh the page, it takes to the logged in page and from there I have to logout.
w.Header().Set("Location", "/")
I would like to know, is this the normal behavior or I am missing something. I initially implemented this using a normal http.Redirect without AJAX which was working fine and now I am trying to get this to work using AJAX and its just not working.
