Ajax

Ajax简介

  Ajax(Asynchronous Javascript And XML) 异步的 Jacascript 和 XML ,即使用 Jacascript 语言与服务器进行异步交互. 传输的数据为XML (当然,传输的数据更多使用 json数据).

  AJAX 最大的优点是不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容.

  AJAX 不需要任何浏览器组件, 但需要用于允许 JavaScript 在浏览器上执行.

  AJAX 异步提交,局部刷新.

   AJAX 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。

  • 同步交互:客户端发出一个请求后,需要等待服务器响应结束后,才能发出第二个请求;
  • 异步交互:客户端发出一个请求后,无需等待服务器响应结束,就可以发出第二个请求。

Ajax的实现

原生js实现ajax

views.py

def register(request):
    if request.method == "POST":
        print(request.POST)
        name = request.POST.get('registerUsername')
        is_exist = UserInfo.objects.filter(username=name)
        if is_exist:
            return HttpResponse("用户名已经被注册")
        else:
            return HttpResponse("用户名可以被注册")

    return render(request,'register.html')

js

{# ajax 弹窗#}
<script>
var b2 = document.getElementById("register-username");
  b2.onblur = function () {
    // 创建远程 XML 对象
    var xmlHttp = new XMLHttpRequest();
    // 提交地址
    xmlHttp.open("POST", "/register/", true);
    // 设置请求头
    xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    // 取到输入数据
    var userdata = b2.value;
    console.log(userdata)
      // 发送数据
    xmlHttp.send('registerUsername=' + userdata);
    // 回调函数 当请求收到后端的相应之后
    xmlHttp.onreadystatechange = function () {
      if (xmlHttp.readyState === 4 && xmlHttp.status === 200) {
        alert(xmlHttp.responseText);
      }
    };
  };
</script>

jQuery实现JAAX

// ajax版本
<script>
    $('#register-username').on('blur', function () {  // 找到 id 绑定方法
        $.ajax({                                      // 调用 ajax
            url: '/register/',                          // 发送请求路径
            type: 'POST',                               // 请求方法
            data: {                                     // 发送的数据
                'registerUsername':$('#register-username').val(),
            },
            success: function (res) {                   // 请求成功后要做的事情
                alert(res)
            },
            error: function (err) {                     // 请求失败后要做的事情
                alert(err)
            }
        })

    })
</script>

AJAX请求如何设置csrf_token

方法1

$.ajax({
  url: "/cookie_ajax/",
  type: "POST",
  data: {
    "username": "Q1mi",
    "password": 123456,
    "csrfmiddlewaretoken": $("[name = 'csrfmiddlewaretoken']").val()  // 使用jQuery取出csrfmiddlewaretoken的值,拼接到data中
  },
  success: function (data) {
    console.log(data);
  }
})

方法2

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

AJAX上传文件

XMLHttpRequest 是一个浏览器接口,通过它,我们可以使得 Javascript 进行 HTTP (S) 通信。XMLHttpRequest 在现在浏览器中是一种常用的前后台交互数据的方式。2008年 2 月,XMLHttpRequest Level 2 草案提出来了,相对于上一代,它有一些新的特性,其中 FormData 就是 XMLHttpRequest Level 2 新增的一个对象,利用它来提交表单、模拟表单提交,当然最大的优势就是可以上传二进制文件。下面就具体

首先看一下formData的基本用法:FormData对象,可以把所有表单元素的name与value组成一个queryString,提交到后台。只需要把 form 表单作为参数传入 FormData 构造函数即可:

<script src="{% static 'jquery-3.5.1.js' %}"></script>
<script>
    $('#btn').click(function () {
        var formData = new FormData();
        {#formData.append("csrfmiddlewaretoken", $("[name='csrfmiddlewaretoken']").val());#}
        formData.append("files",$('#files')[0].files[0]);
        $.ajax({
            url: "/upload/",
            type: "POST",
            processData: false,
            contentType: false,
            data: formData,
            success:function (data) {
                alert(data)

            }
        })
    })
</script>

  

 

posted @ 2020-06-03 15:03  闫世成  阅读(63)  评论(0编辑  收藏  举报