注意:
1、需在项目app.conf中添加以下设置,否则beego获取ajax的json数据为空;

copyrequestbody = true

2、js中定义传递的json数据时,键要与model中定于的结构体保持一致,否则获取的传递数据为空;

根据ajax中设定的json数据组,在beego中定义该结构体,例如:

#js代码
email = $('#email').val();
mobile = $('#mobile').val();
role = $('#role').val();
if (role == "") {
	bootbox.alert("请选择用户角色");
    return false; 
}
role1 = Number(role); #转换为int类型,因为在定义相关结构体时,定义的为Int类型
group = $('#group').val();
data = JSON.stringify({
        "email": email,
        "mobile": mobile,
        "groupname": group,
        "role": role1,
  });
 

modal定义例如:


type User struct {
	Id		int		`json:"id"`
	Name		string		`json:"name"`
	Password	string		`json:"password"`
	Role		int		`json:"role" orm:"default(3)"`
	Email		string		`json:"email"`
	GroupName	string		`json:"groupname"`
	Mobile		string		`json:"mobile"`
	Status		int64		`json:"status"`
	C_time		string		`json:"c_time"`
}

js中ajax配置:

$.ajax({
    url: '/user/edit',
    data: data,
    type: 'post',
    async: true,
    dataType: "json",
    headers: {
        "Content-Type": "application/json"
    },
    success: function (result) { #result为接收beego返回的json数据
    },
    error: function (result) {
    }
});

beego中获取json数据操作如下:

u := &models.User{}
json.Unmarshal(c.Ctx.Input.RequestBody, u)

beego返回json数据给ajax:

result := info  #info为自定义返回
c.Data["json"] = result
c.ServeJSON()
c.StopRun()

beego 可使用GetStrings方法获取数组类型数据,然后对获取的结果进行处理即可,例如

ips := make([]string, 0)
ip_lists := c.GetStrings("ips")
for _, ip_list := range ip_lists{
	 ips = strings.Split(ip_list, ",")
	 fmt.Println(ips)
}

beego可使用GetString方法获取用户Get或者Post请求传递过来的字符串参数,获取整数参数用GetInt方法,但是这里有一个坑,如果获取的字符串过长的话,会自动截取字符串,此时可通过上述定义json结构体的方式获取较长字符串参数,也可以通过定义form类型的结构体获取参数

//modal
type Test struct {
	TestString	string	`form:"test_string"`    //与html中保持一致
}

//controller
t := models.Test {}
m.ParseForm(&t)
tmp := t.TestString

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐