beego获取ajax数据

1. 什么是AJAX

  1. Asynchronous JavaScript And XML(异步 JavaScript 及 XML),是指一种创建交互式网页应用的网页开发技术
  2. Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。

2. 如何使用 AJAX

XMLHttpRequest 是 AJAX 的基础。
XMLHttpRequest 用于在后台与服务器交换数据。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

使用AJAX大致分四步

1. 创建XMLHttpRequest 对象

//js代码获取XMLHttpRequest 对象(保存为util.js)
function getXmlHttpRequest() {
    var xhr;

    try {
        // Firefox, Opera 8.0+, Safari
        xhr = new XMLHttpRequest();
    } catch (e) {

        // Internet Explorer
        try {
            xhr = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {

            try {
                xhr = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {
                alert("您的浏览器不支持AJAX!");
                return false;
            }
        }
    }
    return xhr;
}

2.注册状态回调函数(当XMLHttpRequest 对象的readyState每次发生变化时调用该回调函数)

//当xhr.readyState == 4时所有的步骤都已执行完毕
//当xhr.state == 200时表示已经正确执行
 xhr.onreadystatechange=function(){
    if(xhr.readyState == 4 && xhr.state == 200){
       alter("请求已全部执行,并且成功");
    }
}

3.建立与服务器的异步连接(默认为异步)

/**
  open(method,url,async)方法
  规定请求的类型、URL 以及是否异步处理请求。
  method:请求的类型;GET 或 POST
  url:相求处理请求的url
  async:true(异步)或 false(同步)

  通过time来保证,每次发送新的请求
*/
xhr.open("Post", "/detailsU?time=" + new Date().getTime());

4.发出异步请求

/**
  send方法中发送json格式的字符串
*/
xhr.send('{"Index":"'+index +'", "Change":"' + i +'"}');

通过以上四步就可以成功的发送请求了

附源码:

{{range .PhoneDetails}}    
        <tr onclick="func1(this)">
            <th>{{.Id}}</th>
            <th>{{.Name}}</th>
            <th>{{.Price}}</th>
            <th>{{.Repertory}}</th>
            <th>
                <a href="">编辑
            </th>
            <script type="text/javascript" src="/static/js/util.js"></script>
            <script type="text/javascript">
                function func1(x) {
                    var code = prompt("请输入调整的库存大小:");
                    if(code != null && code != "") {
                        var i = parseInt(code);
                        if(isNaN(i)) {
                            alert('输入错误');
                        } else {
                            var xhr = getXmlHttpRequest();
                            xhr.onreadystatechange = function() {
                                if(xhr.readyState == 4 && xhr.state == 200) {
                                    alter("请求已全部执行,并且成功");
                                }
                            }
                            var index = x.rowIndex;
                            xhr.open("Post", "/detailsU?time=" + new Date().getTime());
                            xhr.send('{"Index":"' + index + '", "Change":"' + i + '"}');

                            alert('修改成功');
                        }
                    } else {
                        alert('输入错误');
                    }
                }
            </script>
        </tr>
        {{end}}

3. 在beego中处理AJAX的请求

1. 首先在models层的models.go中创建数据的结构

/**
  要与传过来的json格式字符串对应
  '{"Index":"'+index +'", "Change":"' + i +'"}'
*/
type Object struct {
  Index string
  Change string
}

2. 注册相应的路由

/**
  在main.go当中注册相应的路由(注意与对应路由设置好)
  xhr.open("Post", "/detailsU?time=" + new Date().getTime());
  "Post:DoUpdate"用来注册当Post方法请求该URL处理的函数
*/
beego.Router("/detailsU", &controllers.DetailController{}, "Post:DoUpdate")

3. 在controller中写好相应的处理函数

/**
  在对应的函数中处理相应的请求

  json.Unmarshal(this.Ctx.Input.RequestBody, ob)
  通过json来解析穿过来的数据,并将数据存储在ob对象中

  在app.conf中设置copyrequestbody = true
*/
func (this *DetailController) DoUpdate(){
        ob := &models.Object{}
        json.Unmarshal(this.Ctx.Input.RequestBody, ob)
        db, err := sql.Open("mysql", "用户名:密码@tcp(IP:3306)/数据库名")
        result, err := db.Exec("UPDATE 数据表名 SET 字段= ? WHERE id = ?",ob.Change, ob.Index)
        if err != nil{
            beego.Error(err)
            return
        }else{
             fmt.Println(result)
        }
}

欢迎一起探讨,相互进步。QQ:3529601371

发布了31 篇原创文章 · 获赞 25 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/s_842499467/article/details/78831800