golang gin ajax post 前端与后端的正确写法

比较常用的场景,记录一下:
前端是一个页面html页面
<script type="text/javascript">
var submitBTN = document.getElementById("url_update");
submitBTN.onclick = function (event) {
// 注意这里是 onclick 函数
console.log("click");
$.ajax({
url: "/update-site1",
type: "POST",
data: {value:1},
cache: false,
contentType: "application/x-www-form-urlencoded",
success: function (data) {
console.log(data);

if (data.code !== 0) {
alert('更新失败')
} else {
new_str = data.res + " " + data.count
$("#txt_content").val(new_str);
alert('更新资源成功!')
}
},
fail: function (data) {
alert("更新失败!");
}
});

$.ajax({
url: "/update-site1",
type: "POST",
data: {value:2},
cache: false,
contentType: "application/x-www-form-urlencoded",
success: function (data) {
console.log(data);

if (data.code !== 0) {
alert('更新失败')
} else {
new_str = data.res + " " + data.count
$("#txt_content").val(new_str);
alert('更新资源成功!')
}
},
fail: function (data) {
alert("更新失败!");
}
})

}

</script>

效果大体上这样的:

20220608004.jpg

 
有几个按钮,然后每个按钮绑定一个点击事件
 
submitBTN.onclick = function (event) {
.....
同上面代码
 
然后在代码里面执行post操作,使用的是ajax封装的方法:
 
注意,contentType用下面的:
contentType: "application/x-www-form-urlencoded",

还有不要把
processData: false,
这个设置为false,否则gin的后端解析不到数据
 
写完前端之后,就去后端
 
路由方法:
绑定上面的url update-site1
	router.POST("/update-site1", controllers.BaiduSite1)

 然后就是实现
controllers.BaiduSite1 这个方法:
 
func BaiduSite1(ctx *gin.Context) {
if ctx.Request.Method == "POST" {

value := ctx.PostForm("value")
fmt.Println(value)
int_value, err := strconv.Atoi(value)
if err != nil {
ctx.JSON(http.StatusOK, gin.H{
"code": 1,
"res": "",
"count": 0,
})
return
}
res, count := webmaster.PushProcess(1, int_value)
ctx.JSON(http.StatusOK, gin.H{
"code": 0,
"res": res,
"count": count,
})
}
}

 获取ajax里面的字段,
使用:context 中的PostForm方法
value := ctx.PostForm("value")

 剩下的就是一些常规的操作方法

最后需要设置json的返回数据
ctx.JSON(http.StatusOK, gin.H{
"code": 0,
"res": res,
"count": count,

 完整代码可以到公众号里面获取:
 


 
 

0 个评论

要回复文章请先登录注册