博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ajax相关 及 解决csrf_token
阅读量:6196 次
发布时间:2019-06-21

本文共 3554 字,大约阅读时间需要 11 分钟。

 

一、

  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

你可能感兴趣的文章
(linux)Centos 7 xfsdump文件系统的备份和恢复
查看>>
Kosaraju算法解析: 求解图的强连通分量
查看>>
Linux系统硬链接和软链接
查看>>
设置RPMforge源
查看>>
开始学习QT
查看>>
etcd 调优(Tuning)
查看>>
Android读取Txt文件
查看>>
配置Splunk发送邮件
查看>>
面试步骤
查看>>
两台交换机做简单的telnet实验
查看>>
UVA 1456 六 Cellular Network
查看>>
性能测试的CheckList
查看>>
Django -- 安装入门
查看>>
18.6 负载均衡集群介绍;18.7 LVS介绍;18.9 LVS NAT模式搭建(上);18.10 LVS NAT模式搭建(下)...
查看>>
成长型企业需要什么样的光纤存储
查看>>
直击Dell World 2014: 戴尔现在挺好的
查看>>
第7章 性能和可靠性模式 Server Clustering(服务器群集)
查看>>
1.Python的类方法和静态方法
查看>>
Qt数据库总结
查看>>
fedora20 安装nvidia独立显卡驱动
查看>>