zoukankan      html  css  js  c++  java
  • Django(七)---AJAX

    Django(七)---AJAX

    AJAX简介

    AJAX(Asynchronous Javascript And XML),翻译成中文就是'异步的javascript和XML'

    使用javascript语言与服务器进行异步交互,传输的数据为XML

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

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

    ​ 同步交互:客户端发出一个请求后,需要等待服务器相应结束后,才能发出第二个请求

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

    ajax基本语法结构

    is_ajax()判断当前请求是否是ajax请求,返回布尔值

    使用ajax之后,httpresponse都不在作用于页面,而是直接与ajax做交互

    $('#d4').on('click',function () {
        $.ajax({
            url:'',  // 数据提交的后端地址  不写就是往当前页面提交  也可以写后缀 也可以写全称  跟actions一样
            type:'post',  // 提交方式  默认是get请求
            data:{'i1':$('#d1').val(),'i2':$('#d2').val()},  // 提交的数据
            success:function (data) {  // 形参data就是异步提交之后后端返回结果
                $('#d3').val(data)  // 回调机制需要做的事情
            }
        })
    })
    

    前后端传输数据编码格式

    前后端交互之间有一个数据编码格式,对于不用的数据,后端进行不同的处理

    如: request.POST和request.FILES 这两种都是用来获取用户传输过来的数据

    编码格式(后缀):

    1. urlencoded
    2. formdata(enctype)
    3. application/json格式数据
    

    往后端发送数据方法:

    1. a标签通过href携带参数			get请求
    2. form表单                            get/post
    3. ajax                                     get/post
    

    form表单发送数据的编码格式

    1. for目标单默认的编码方式的urlencoded

      ​ urlencoded所对应的的数据格式:

      ​ username=simple&password=123

      ​ django后端针对urlencoded数据,会自动解析并且封装到request.POST中

      1. form表单发送文件时,编码格式是Content-Type: multipart/form-data;

      ​ django后端只要数据是满足urlencoded格式,就会自动解析到request.POST中

      ​ 如果是一个文件对象,django后端也会自动识别,并放入request.FILES中

      1. form表单无法发送json格式的数据,如果要发送,只能借助于ajax

    ajax发送数据的编码格式

    ajax能发送的三种格式

    1. urlencoded
    2. formdata
    3. application/json格式数据
    

    ajax通过contentType参数,修改编码格式:

    ​ 转化成json数据格式

    contenType:'application/json

    Content-Type: application/x-www-form-urlencoded; charset=UTF-8

    ajax默认的编码格式也是urlencoded,后端django也是将数据解析到request.POST中

    注意:

    ​ 在涉及前后端数据交互的时候,数据的格式与编码格式一定要一致

    ajax传输json格式数据

    后端				前段
    dumps			stringify
    loads			parse
    

    通过ajax发送json格式数据,在data

    Content-Type: application/json

    $('#d1').click(function () {
    $.ajax({
        url:'',
        type:'post',
        contentType:'application/json',  # 1.注意点1
        data:JSON.stringify({'username':'jason','password':'123'}),  # 2.注意点2
        success:function (data) {
            alert(123)
        }
    })
    

    django针对前后传输过来的json数据不会做处理

    会直接放入request.body中(二进制的json数据)

    Ajax传输文件数据

    借助于内置对象 new
    该对象即可以携带文件数据 同样也支持普通的键值对

    $('#d1').click(function () {
           // 先生成一个内置对象
           var MyFormData = new FormData();
           // 1. 先添加普通的键值
           MyFormData.append('username','jason');  // 添加了一组普通的简直对
           MyFormData.append('password','123');
           // 2. 添加文件数据
           MyFormData.append('myfile',$('#d2')[0].files[0]);  // 如何获取input框中文件对象$('#d1')[0].files[0]
       $.ajax({
           url:'',
           type:'post',
           data:MyFormData,  # 1
    
           // 发送文件必须要指定的两个参数
           contentType:false,  // 不适用任何编码  MyFormData对象内部自带编码 django后端能够识别  #2
           processData:false,  // 不要处理数据  # 3
           success:function (data) {
           }
       })
    })
    

    序列化

    序列化将数据整合成一个大字典的形式,方便前后端数据的交互,实现前后端分离

    from app01 import models
    from django.core import serializers
    # 序列化目的  将数据整合成一个大字典形式 方便数据的交互
    def zzz(request):
        user_queryset = models.User.objects.all()
        # [{username:...,password:...,hobby:...,},{},{},{}]
        # user_list = []
        # for data in user_queryset:
        #     user_list.append(
        #         {'username':data.username,
        #          'password':data.password,
        #          'gender':data.get_gender_display(),
        #
        #          }
        #     )
        res = serializers.serialize('json',user_queryset)
        return HttpResponse(res)
    
  • 相关阅读:
    tasker支持的shell 命令大全
    crx 文件安装 如何安装 Chrome插件
    python mac地址计算
    Java线程池
    springMVC请求过程
    java中特殊的String类型
    单例模式和多例模式
    hash算法学习
    arraylist和linkedlist的简单比较
    乐观锁和悲观锁
  • 原文地址:https://www.cnblogs.com/samoo/p/11966239.html
Copyright © 2011-2022 走看看