1

我正在使用表单将 jquery 提交到 html 页面。数据已成功传送到我的后端 beego(golang 框架)控制器。运行一些功能后,控制器必须决定下一步重定向到哪里。但这被jquery阻止了。如何使用 go 代码覆盖 jquery 和重定向?

我的剧本

$().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"
}
4

2 回答 2

0

我最终做的不是一个完美的方法。但它解决了我的问题。所以我正在分享它。我欢迎针对此问题的所有建议和任何其他解决方案。

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))

现在在前端我做了以下事情:

$("#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
            }
        });
    });
于 2016-07-05T05:21:12.400 回答
-1

你不能用 c.Redirect(redirectURL, 302) 重定向到一个全新的控制器,'c' 是你的控制器吗?

我基本上对“/”、“/register”等使用不同的控制器。

于 2016-06-11T19:51:36.033 回答