• 【1029 | Day55】AJAX上传文件


    1. AJAX上传文件

    1. 需要利用内置对象 Formdata

    2. 该对象既可以传普通的键值,也可以传文件

    # 获取input获取用户上传文件的文件的内容
    
            // 1.先通过jquery查找到该标签
            // 2.将jquery对象转换成原生的js对象
            // 3.利用原生js对象的方法 直接获取文件内容
            
            $('#t3')[0].files[0]
            $('#b1').click(function () {
            var myFormData = new FormData();  // 1.先生成一个formdata对象
            myFormData.append('username',$("#t1").val());  // 2.朝对象中添加普通的键值
            myFormData.append('password',$("#t2").val());  // 2.朝对象中添加普通的键值
                
            // 3.朝对象中添加文件数据
            // 1.先通过jquery查找到该标签
            // 2.将jquery对象转换成原生的js对象
            // 3.利用原生js对象的方法 直接获取文件内容
                
            myFormData.append('myfile',$('#t3')[0].files[0]);
            $.ajax({
                url:'',
                type:'post',
                data:myFormData,  // 直接丢对象
                // ajax传文件 一定要指定两个关键性的参数
                contentType:false,  // 不用任何编码 因为formdata对象自带编码 django能够识别该对象
                processData:false,  // 告诉浏览器不要处理我的数据 直接发就行
    
                success:function (data) {
                    alert(data)
                }
            })
        })
    
    

    2. 注意事项

    1. 利用formdata对象 能够简单的快速传输数据 (普通键值 + 文件)

    2. 参数

      • data:formdata对象
      • contentType:false
      • processData:false

    3. contentType前后端传输数据编码格式

    form表单

    默认的提交数据的编码格式是urlencoded

    那么什么是urlencoded呢?

    • username=admin&password=123,什么等于什么的这种就是符合urlencoded数据格式

    问题来了!!!为什么urlencoded数据格式不需要我们自己去获取解析呢?

    • 因为django后端针对urlencoded数据格式信息会自动解析,会将结果打包给request.POST,用户只需要从request.POST即可获取对应信息

    FormData

    • django后端针对formdata格式类型数据 也会自动解析,但是不会放到request.POST中而是放到了request.FILES

    AJAX

    • ajax默认的提交数据的编码格式也是urlencoded

    • django后端针对不同的编码格式数据,会有不同的处理机制以及不同的获取数据的方法

    4. 序列化组件

    举个栗子:将用户表的数据 查询出来 返回给前端,给前端的是一个大字典,字典里面的数据是一个个的字段

    img

    前端是怎么写的呢?

    img

    5. 补充

    • django后端针对不同的编码格式数据,会有不同的处理机制以及不同的获取该数据的方法
    • 前后端在做数据交互的时候一定要标明你所发的数据到底是什么格式,数据是什么格式,就应该告诉客户什么格式
    • 序列化组件:自动帮你序列化一些数据
  • 相关阅读:
    321list,元组,range**数字是不可迭代的!
    320作业
    320基础数据类型初始
    319作业
    316作业
    319 Python基础之格式化输出、逻辑运算符、编码、in not in、while else、
    windows查看端口占用指令
    2016年学习计划
    刷算法的时候有没有必要自写测试用例?
    我们为什么不能只用O记号来谈论算法?
  • 原文地址:https://www.cnblogs.com/fxyadela/p/11757678.html
Copyright © 2020-2023  润新知