• ajax


    AJAX即“Asynchronous JavaScript and XML”(异步的JavaScript与XML技术),指的是一套综合了多项技术的浏览器端网页开发技术。Ajax的概念由杰西·詹姆士·贾瑞特所提出。

    传统的Web应用允许用户端填写表单(form),当提交表单时就向网页服务器发送一个请求。服务器接收并处理传来的表单,然后送回一个新的网页,但这个做法浪费了许多带宽,因为在前后两个页面中的大部分HTML码往往是相同的。由于每次应用的沟通都需要向服务器发送请求,应用的回应时间依赖于服务器的回应时间。这导致了用户界面的回应比本机应用慢得多。

    与此不同,AJAX应用可以仅向服务器发送并取回必须的数据,并在客户端采用JavaScript处理来自服务器的回应。因为在服务器和浏览器之间交换的数据大量减少,服务器回应更快了。同时,很多的处理工作可以在发出请求的客户端机器上完成,因此Web服务器的负荷也减少了。

    1 向后端发送数据

    路由urls:

      path('ajax_test/', views.ajax_test),

    视图函数:

    def ajax_test(request):
        if request.method == "GET":
            return render(request, 'ajax_test.html')
        else:
            username = request.POST.get("username")
            password = request.POST.get("password")
            print(username, password)
            data = username + " " + password
            return HttpResponse(data)

    模板页面

    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
    </head>
    <body>
    {% csrf_token %}
    <p>
        <input type="text" class="user" placeholder="用户名">
    </p>
    <p>
        <input type="password" class="pwd" placeholder="密码">
    </p>
    <button id="ajax_test">Ajax提交</button>
    <script>
        $("#ajax_test").click(function () {
            let user = $(".user").val();
            let pwd = $(".pwd").val();
            $.ajax({
                url: "/ajax_test/",
                type: "POST",
                data: {
                    username: user, password: pwd,
                    csrfmiddlewaretoken: $("[name='csrfmiddlewaretoken']").val()
                },
                success: function (data) {
                    alert(data)
                }
            })
        })
    </script>

    2 上传json数据

    路由urls:

      path('up_json/', views.up_json),

    视图函数:

    def up_json(request):
        import json
        data = json.loads(request.body.decode("utf-8"))
        print(data, type(data))
        return HttpResponse("提交成功")

    模板页面

    <div style="margin-left: 100px;margin-top: 50px;">
    <button class="up_btn">上传json数据</button>
    </div>
    <script>
        $(".up_btn").click(function () {
            $.ajax({
                url: "/up_json/",
                type: "POST",
                contentType: "json",
                header: {"X-CSRFToken": $("[name='csrfmiddlewaretoken']").val()},
                data: JSON.stringify({
                    k1:"abc",
                    k2:"xyz",
                    k3: "v3",
                }),
                success: function (data) {
                    console.log(data);
                    alert(data);
                }
            })
        })
    </script>

     点击“上传json数据”

    3 基于form表单上传文件

    路由urls:

      path('up_file/', views.up_file),

    视图函数:

    def up_file(request):
        import os
        if request.method == "POST":
            file_obj = request.FILES.get("file_name")
            name = file_obj.name
            with open(os.path.join("media", name), 'wb') as f:
                for block in file_obj:
                    f.write(block)
            return HttpResponse("上传完成!")

    模板页面

        <form action="/up_file/" method="post" enctype="multipart/form-data">
            {% csrf_token %}
            <input type="file" name="file_name">
            <input type="submit">
        </form> 

    选择文件 1.jpg,并点击提交

    4 基于Ajax请求上传文件

    路由urls:

      path('ajax_up_file/', views.ajax_up_file),

    视图函数:

    def ajax_up_file(request):
        import os
        if request.method == "POST":
            file_obj = request.FILES.get("file_name")
            name = file_obj.name
            with open(os.path.join("media", name), 'wb') as f:
                for block in file_obj:
                    f.write(block)
            return HttpResponse("上传完成!")

    模板页面

        <form action="/ajax_up_file/" enctype="multipart/form-data">
            {% csrf_token %}
            <input type="file" class="file_name">
            {#    不能用submit属性#}
            <input type="button" class="ajax_up_file" value="ajax上传文件">
        </form>
    
    <script>
        $(".ajax_up_file").click(function () {
            let formdata = new FormData();
            formdata.append("csrfmiddlewaretoken", $("[name='csrfmiddlewaretoken']").val());
            formdata.append('file_name', $(".file_name")[0].files[0]);
            $.ajax({
                url: "/ajax_up_file/",
                type: "POST",
                processData: false,
                contentType: false,
                data: formdata,
                success: function (data) {
                    console.log(data);
                }
            })
        })
    </script>

    选择文件 2.jpg

    点击ajax上传文件

     

     基本操作到此结束!

  • 相关阅读:
    java jpg图片按质量保存
    Python 九九乘法表
    Linux 磁盘空间查看
    jsTree 隐藏父节点的复选框;只留最底一层的复选框
    padding-top实现列表图片自适应
    jsTree自定义contextmenu 的二种方式
    jstree插件对树操作增删改查的使用
    layui遇到的坑
    layui复选框全选,单选取消全选
    获取 Layui 表单 select 中的 option 的自定义属性
  • 原文地址:https://www.cnblogs.com/Sunzz/p/10567325.html
Copyright © 2020-2023  润新知