Как перенаправить на другой шаблон из 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" и т. Д.