Django 之Ajax请求

一.简单ajax的应用

   ajax是一个与服务器进行交互的技术。
    特点:异步  不刷新页面  数据量小 
  1. 参数:   简单用法

<input type="text" name="ii1">+
<input type="text" name="ii2">=
<input type="text" name="ii3">
<button type="submit" id="b1">计算</button>
<script>
    $("#b1").click(function () {
        $.ajax({
            url:'/ajax/',                     1.请求url
            type:'post',                      2.请求类型          JSON.parse()
            data:{                   3.请求数据:当是一个列表hobby: JSON.stringify(['a', 'b', 'c']) 转换为字符在发送
                i1:$("[name=ii1]").val(),
                i2:$("[name=ii2]").val(),
            },
            success:function (res) {          4.请求成功时被调用,django返回的resposne就是res
                console.log(res);
                $("[name=ii3]").val(res)
            },
            error:function (res) {            5.请求失败时被调用,
                console.log('这是错误的')
            }
        })
    })

二.当要处理csrf_token时 的三种用法   CSRF跨站请求伪造

   1. 从request.POST中获取csrfmiddlewaretoken对应的值
       request_csrf_token = request.POST.get('csrfmiddlewaretoken', '')

      所以可以在 ajax 的 post请求数据中 添加 csrfmiddlewaretoken这个键值对,django就会自动识别到

csrfmiddlewaretoken: $('[name="csrfmiddlewaretoken"]').val(),

2. 从请求头中获取X-csrftoken 的值 
        request_csrf_token = request.META.get(settings.CSRF_HEADER_NAME, '')

       ajax 的请求也可以设置请求头 有headers这个参数

 headers: {"X-CSRFToken": $('[name="csrfmiddlewaretoken"]').val()},

3.设置全局ajax的请求头

  当每一个ajax 都需要设置 headers 时 可以新建一个  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');              1.获得浏览器的cookie
function csrfSafeMethod(method) {
  return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({                                         2.设置ajax的headers
  beforeSend: function (xhr, settings) {
    if (!csrfSafeMethod(settings.type) && !this.crossDomain) {     3.取反就是post请求时
      xhr.setRequestHeader("X-CSRFToken", csrftoken);
    }
  }
});

  4.当ajax 处理  redirect 重定向 时

       当view 中返回一个redirect时 ajax 的sucess函数接受的是 一个重定向的网址,所以它会 返回重定向 后的html源码,而浏览           器不会跳转所以 在view 需要把 重定向网址 封装在 {'url': 'www.baidu.com'}字典中,

            用ajax 重定向, 在sucess函数中的res就是这个字典      添加: location.href=res.url 

           

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值