分为两步:

1.get请求的时候渲染xsrf数据:this.Data["xsrf_token"] = this.XSRFToken()

2.html中分为两步:

  • html中首先在meta中设置_xsrf,值为后端传的xsrf_token:

            <meta name="_xsrf" content="{{.xsrf_token}}" />

  • ajax提交的时候先对ajax进行扩展


    具体代码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="_xsrf" content="{{.xsrf_token}}" />
        <title>Title</title>
        <script src="/static/js/jquery.min.js"></script>
    </head>
    <body>
    
    test_xsrf 页面
    
    <form>
        <input type="button" value="提交" id="btn">
    </form>
    
    
    <script>
        // 对ajax进行扩展
        var ajax = $.ajax;
        $.extend({
            ajax: function(url, options) {
                if (typeof url === 'object') {
                    options = url;
                    url = undefined;
                }
                options = options || {};
                url = options.url;
                var xsrftoken = $('meta[name=_xsrf]').attr('content');
                var headers = options.headers || {};
                var domain = document.domain.replace(/\./ig, '\\.');
                if (!/^(http:|https:).*/.test(url) || eval('/^(http:|https:)\\/\\/(.+\\.)*' + domain + '.*/').test(url)) {
                    headers = $.extend(headers, {'X-Xsrftoken':xsrftoken});
                }
                options.headers = headers;
                return ajax(url, options);
            }
        });
    
        // ajax提交部分,和原来使用ajax的方式没有区别
        var btn = document.getElementById("btn");
        btn.onclick = function (ev) {
           
         $.ajax({
                    url:"/test_do_ajax_xsrf",
                    type:"POST",
                    data:{},
                    success:function (data) {
                        if(data["code"] == 200){
                            alert(data["msg"])
        
                        }
                    },
                    error:function (data) {
                        alert(data["message"])
                    }
         })
       }
    </script>
    </body>
    </html>