Ajax相关 及 解决csrf_token

 

一、

  AJAXAsynchronous Javascript And XML)翻译成中文就是异步的JavascriptXML”

  即使用Javascript语言与服务器进行异步交互,传输数据。传输的数据不只是XML。

       特点优势: 

    1. AJAX使用JavaScript技术向服务器发送异步请求

    2. AJAX请求无须刷新整个页面,即可与服务器交换数据并更新部分网页内容

    3. 因为服务器响应内容不再是整个页面,而是页面中的部分内容,所以AJAX性能高 

     即(异步不等待)(局部刷新)(高性能)

  ajax 的使用:

    $.ajax( {  } )   参数如下

      $.ajax({

        url: "/calc/",               // 给谁发请求

        type: "post",            // 请求的方法

        data: {"name": "Alex", "age": 35},   // 数据

        success:function(res){      // 请求被成功响应之后会做的事儿

          console.log(res)

        },

        error:function(err){

          console.log(err)    // 请求发生错误时会做的事儿

        }
      })

  data中的对象不能发生嵌套,要做处理

    data: {

      "name": "alex",
      "hobby": JSON.stringify(["抽烟", "喝酒", "吹牛逼"]),
    },

  

   原生JS 发 ajax:

 1 var b2 = document.getElementById("b2");
 2   b2.onclick = function () {
 3     // 原生JS
 4     var xmlHttp = new XMLHttpRequest();
 5     xmlHttp.open("POST", "/ajax_test/", true);
 6     xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
 7     xmlHttp.send("username=q1mi&password=123456");
 8     xmlHttp.onreadystatechange = function () {
 9       if (xmlHttp.readyState === 4 && xmlHttp.status === 200) {
10         alert(xmlHttp.responseText);
11       }
12     };
13   };
View Code

 二、解决csrf_token方法

  关键点是request请求中,必须要有 token随机字符串

  方法1: 在ajax请求的传送数据(data)中设置 csrfmiddlewaretoken 值。

  方法2: 在ajax请求头(headers)中设置 X-CSRFToken 值。

      注意:可以使用 $.ajaxSetup( ) 方法为ajax请求统一设置。

  

  关于获取token随机字符串的方法:

    方法1:渲染页面中加 {% csrf_token %} ,通过属性选择器$("[name='csrfmiddlewaretoken']").val()取值。

        在前段渲染出一个隐藏的input标签,有属性name="csrfmiddlewaretoken",值就是token随机字符串
       (所以表单中加{%csrf_token%},提交数据时,会将token随机字符串以键值对的形式一并提交)
  

        

  

    方法2: 通过获取页面渲染时返回的cookie中的csrftoken的value值,就是所需token随机字符串。

        形式1:

          注意:需要引入一个jquery.cookie.js插件。

          $.ajax({
             url: "/cookie_ajax/",
             type: "POST",

             // 从Cookie取csrftoken,并设置到请求头中
             headers: {"X-CSRFToken": $.cookie('csrftoken')}, 
             data: {"username": "Q1mi", "password": 123456},
             success: function (data) {
               console.log(data);
             }
          })

        形式2:

          不引插件,自己写一个getCookie 方法,从Cookie中取csrftoken值

          js静态文件中:

          function getCookie(name) {
            var cookieValue = null;
            if (document.cookie && document.cookie !== '') {
              var cookies = document.cookie.split(';');
              for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) === (name + '=')) {
                  cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                  break;
                }
              }
            }
            return cookieValue;
          }
          var csrftoken = getCookie('csrftoken');

            JS中:

            headers: {"X-CSRFToken": csrftoken},  // 从Cookie取csrftoken,并设置到请求头中

  最终,解决csrf_token问题

  官方推荐方法(插件版):

      function csrfSafeMethod(method) {

           // these HTTP methods do not require CSRF protection
           return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
      }
 
      $.ajaxSetup({
           beforeSend: function (xhr, settings) {
                if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
                     xhr.setRequestHeader("X-CSRFToken", $.cookie('csrftoken'));
                }
            }
      });

 

  

 

ok

转载于:https://www.cnblogs.com/kingon/p/9442741.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值