zoukankan      html  css  js  c++  java
  • Django---Ajax上传文件

    一、Ajax特点

    二、Ajax的请求过程

    三、Ajax发get/post请求例子

    四、请求头之contentType含义

    五、基于form表单和Ajax的文件上传

    六、Ajax发送json格式数据

    ---------------------------------------------------------------------------

    一、Ajax特点

    回顾一下:前端可以通过哪些途径给服务器发请求?
    1、浏览器地址栏,默认是get请求
    2、form表单:get请求/post请求
    3、a标签,默认是get请求
    4、Ajax请求,get/post
    两个特点:1 异步请求 2 局部刷新

    二、Ajax的请求过程

    要把Ajax请求绑定到某事件里,因为是js发的

    $(".Ajax").click(function(){
        $.ajax({
            //请求url,IP:Port不写是当前页面的ip+port
            url:"/test_ajax/",     
            type:"get", //请求方式,可以是post
            //success是回调函数,对浏览器返回的data进行处理
            //data:返回的响应体的内容
            success:function(data){  
                console.log(data)
            }
        });
    });

    请求过程:

     三、Ajax发get/post请求例子

    1、ajax发送get请求:
    $(function(){
      $.ajax({
            //请求url,IP:Port不写是当前页面的ip+port
        url:'/test_ajax/',
        type:'get',
            //请求参数,放在路径的?后面
            data:{a:1, b:2},
            //成功之后调用,data是响应体内容
        success:function(data){
          console.log(data);
          $('body').html(data);
        },
        error:function(err){console.log(err);} //出错打印err信息
      });
    });
    
    2、ajax请求json数据。服务器端用HttpJson返回
    $(function(){
      //指定返回数据的类型
      $.ajax({
        url:'/test_ajax/',
        type:'get',
        dataType:'json',//设置返回的数据的数据类型为json
        success:function(data){
          console.log(data.name);
          $('.box').text(name);
        },
        error:function(err){console.log(err);}
      });
    });
    
    
    3、ajax发送post请求:(会被Django的CSRF阻止,后面说怎么处理)
    $(function(){
      $.ajax({
        url:'/test_ajax/',
        type:'post',
        data:{
         "name":"alex",
            "pwd":"123"
         "csrfmiddlewaretoken":$('input[name="csrfmiddlewaretoken"]').val()
        },
        success:function(data){
            console.log(data);
        },
        error:function(err){console.log(err);}
      });
    });

     四、请求头之contentType含义

    ------------------------------------------------
    请求头之contentType:指定请求的编码格式
    常见的三种值
    1.contentType="application/x-www-form-urlencoded"
    不写都是默认这种格式,告诉服务端:请求体数据会以键值对方式提交:a=1&b=2&c=3
    服务端放在request.POST 由request.body解析而来
    2.enctype="multipart/form-data"
    这是文件上传的编码格式
    服务端放在request.FILES
    3.enctype="application/json"
    这是告诉服务端:请求体的数据是json格式 '{a=1,b=2,c=3}'
    服务端放在request.body 这是元数据,存请求报文中的请求体,先解码,再反序列化
    -------------------------------------------------

    五、基于form表单和Ajax的文件上传

    1、基于form表单的文件上传
    form表单里要加:enctype="multipart/form-data"

    <form action="" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit">
    </form>

    views视图函数:

    request.FILES #文件存放在这里
    file_obj = request.FILES.get("file")
    with open(file_obj.name, "wb") as f:
      for line in file_obj:
        f.write(line)

    2、基于ajax的文件上传
    <form action="" method="post">
    用户名 <input type="text" id="user">
    文件 <input type="file" id="file">{% csrf_token %}
    <input type="button" values="上传">
    </form>

    $("#file").change(function () {
    //这个要构建formdata对象,相当于定义contentType=multiform
    var formdata = new FormData();
    //ajax取文件对象固定写法:$("#file")[0].files[0]
    formdata.append("file", $(this)[0].files[0]);
    formdata.append("csrfmiddlewaretoken",
    $('input[name="csrfmiddlewaretoken"]').val());
    $.ajax({
    url: "{% url 'customer_import' %}",
    type: 'post',
    // 用这个就要固定加上面两个false参数
    contentType: false,
    processData: false,
    data: formdata,
    success: function (data) {
    console.log(data);
    }
    ,
    error: function (err) {
    console.log(err);
    }
    });
    })

    六、Ajax发送json格式数据

    ajax发json格式数据,指定contentType:"application/json"

    $(function(){
      $.ajax({
        url:'/test_ajax/',
        type:'post',
    contentType:"application/json",
    data:JSON.stringfy({
    a:1,
    b:2
    }),
        success:function(data){
          console.log(data);
        },
        error:function(err){console.log(err);}
      });
    });

  • 相关阅读:
    HDU 3152 Obstacle Course(BFS+优先队列 重载)
    芸芸毕业生
    shell学习三十四天----printf具体解释
    tomcat启动批处理——catalina.bat
    ZooKeeper启动过程2:FastLeaderElection
    R语言——数据分析的一把利剑
    Oracle blob字段的插入和更新
    [LeetCode] 698. Partition to K Equal Sum Subsets
    小知识!
    小知识!
  • 原文地址:https://www.cnblogs.com/staff/p/10731246.html
Copyright © 2011-2022 走看看