Как перенаправить на другой шаблон из golang при использовании формы отправки jquery?

Я использую форму отправить JQuery на HTML-страницу. Данные успешно доставлены на мой бэкэнд-контроллер beego(golang framework). После запуска некоторых функций контроллер должен был решить, куда перенаправить дальше. Но это было заблокировано jquery. Как я могу переопределить JQuery и перенаправить с помощью кода Go?

Мой сценарий

$().ready(function() {
    $("#signupForm").validate({
        rules: {
            fullname: "required"                
        },
        messages: {
            fullname: "Please enter your full name"
        },
        submitHandler: function(form){
            $(form).ajaxSubmit({
                    url: '/add_user',
                    type: 'POST',
                    dataType: 'html',
                    data : $( "#signupForm" ).serialize(),
                    success : function(data) {

                    }
            });
            return false
        }
    });
});

Мой код

status := user.AddUserAndCompany(company)
switch status {
case true:
    this.Data["Website"] = "beego.me"
    this.Data["Email"] = "astaxie@gmail.com"
    this.TplName = "index.tpl"
case false:
    this.Data["ErrorMessage"] = "ServerConnectionError"
    this.Layout = "layouts/header_logout.html"
    this.TplName = "templates/registration.html"
}

2 ответа

То, что я в итоге сделал, не идеальный способ. Но это решило мою проблему. Так что я делюсь этим. Я приветствую все предложения и любые другие решения этой проблемы.

switch dbStatus {
    case 0://db Error
        dataToClient = "Server Connection Error"
        this.Ctx.ResponseWriter.Write([]byte(dataToClient)) //Error_msg_1
    case 1://Email already in use
        dataToClient = "EmailError"
        this.Ctx.ResponseWriter.Write([]byte(dataToClient)) //Error_msg_2
    case 2://UserName already in use
        dataToClient = "UserNameError"
        this.Ctx.ResponseWriter.Write([]byte(dataToClient)) //Error_msg_3
    case 3://Everything is fine
        if user.UserType == 0 { //Choosing the url
            dataToClient = "/admin_home" //url_1
            this.Ctx.ResponseWriter.Write([]byte(dataToClient))
        } else {
            dataToClient = "/user_home" //url_2
            this.Ctx.ResponseWriter.Write([]byte(dataToClient))
        }
    }

Мне не удалось найти метод для перенаправления из серверной части. Поэтому я закодировал, чтобы выбрать путь URL-адреса из серверной части и отправить его в интерфейс с this.Ctx.ResponseWriter.Write([]byte(dataToClient))

Теперь в front-end я сделал следующее:

$("#signupForm").validate({
            rules: {
                fullName: "required"
            },
            messages: {
                fullName: "Please enter your full name"
            },
            submitHandler: function(form){
                $(form).ajaxSubmit({
                        url: '/add_user',
                        type: 'POST',
                        dataType: 'html',
                        data : $( "#signupForm" ).serialize(),
                        success : function(data) {
                            //Checking whether the data from back-end is an url or not... 
                            if (data.charAt(0) === '/'){ // if url
                                window.location.href = data;
                            }else{ //else error message
                                document.getElementById('regError').innerHTML = data;
                            }

                        }
                });
                return false
            }
        });
    });

Не можете ли вы перенаправить на совершенно новый контроллер с помощью c.Redirect(redirectURL, 302), где "c" - ваш контроллер?

Я в основном использую разные контроллеры для "/", "/register" и т. Д.

Другие вопросы по тегам