ajax与gin的前后端交互案例

此例是源自于我制作个人博客网站的一个联系模块,预期功能是用户填写姓名,电子邮箱,电话号码,和内容,(其中内容和姓名不能为空)然后上传到后端,后端存入数据库并且返回是否成功的信息,前端根据信息提示用户。

UI界面如下

用户点击提交以后提交内容

ajax部分如下

function ContactSubmit() {
    let name= $('#name').val();
    let email = $('#email').val();
    let phoneNumber= $('#phoneNumber').val();
    let content = $('#content').val();
    let flag = confirm('确认上传?');//confirm时确认提示框,点击确认返回true,点击取消返回falseif(flag){//点击弹框的确认
    if(flag){
        $.ajax({
            type: 'POST',
            url: 'http://localhost/ContactSubmit',
            contentType:'application/json',
            dataType:'json',
            data: JSON.stringify({
                "Name": name,
                "Content": content,
                "Email": email,
                "PhoneNumber": phoneNumber,
            }),
            success: function (data) {
                if (data['msg'] === "ok") {
                    alert("提交成功")
                } else {
                    alert(data['msg'])
                }
            }
        })
    }else{//点击弹框的取消
        //alert('点击了取消')
}
}

gin的handlefunc如下

func Contact(c *gin.Context) {
	var OneContact ContactContent
	err := c.BindJSON(&OneContact)
	if err != nil {
		panic(err)
	}
	if OneContact.Content == "" || OneContact.Name == "" {
		c.JSON(http.StatusOK, gin.H{
			"msg": "fail:content can't be empty!",
		})
	} else {
		db.Create(&OneContact)
		c.JSON(http.StatusOK, gin.H{"msg": "ok"})
	}
}

本来按道理,发送ajax请求以后,gin会提取RequestBody,然后判断是否符合条件,如果符合则存入数据库并返回ok,但是爆出了如下错误,

明明是post请求,却出现了options请求,在网上查询一番之后,判断可能是因为我的传入格式和实际传入格式不符,所以我将contentType改成了

application/x-www-form-urlencoded

还是出现了以下报错

 

有接收到后端传回来的ok消息,说明后端是有读到数据,并且处理成功了的,但是返回的数据却无法使用,最后追踪

脚本无法获取响应主体(原因:CORS Missing Allow Origin)

的错误,发现竟然是因为我们发起的跨域请求,但是我们都是在本地进行实验,为什么会出现跨域请求?最后锁定在这段代码

 url: 'http://localhost/ContactSubmit',

将他改成

 url: 'http://127.0.0.1/ContactSubmit',

原因是因为浏览器将localhost和127.0.0.1解析成不同的域名,导致出现的错误

终于我们完成通讯

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值