Django之Ajax

Django之Ajax

Ajax

Ajax简介

AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步的Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML)。

AJAX 不是新的编程语言,而是一种使用现有标准的新方法。

AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。(这一特点给用户的感受是在不知不觉中完成请求和响应过程)

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

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

Ajax常见应用场景

注册时,当文本框输入变化时,使用Ajax技术,向服务器发送一个请求,然后服务器会把查询到的结果响应给浏览器,最后再把后端返回的结果展示出来。

  • 整个过程页面没有刷新,只是局部位置刷新而已。
  • 当请求发出后,浏览器还可以简写其他操作,无需等待服务器响应!

img

AJax的优缺点

  • Ajax使用JavaScript技术向服务器发送异步请求;
  • Ajax请求无需刷新整个页面;

Ajax基本语法结构

$.ajax({
    url:'',#指定朝哪个后端地址发送请求 不写默认曹当前地址提交
    type:'post' #指定提交方式
    
    data:{'username':'jason','password':'123'}
    success:function(data){
        #data指代的就是后端返回的异步提交的结果
        #异步回调机制逻辑处理代码
    }
})

Ajax数据编码格式

ajax  默认的数据编码格式是urlencoded
        也就意味着ajax发送post请求django后端默认是通过request.POST获取数据
        
    ajax发送json格式数据
        如何查看前端提交数据的编码格式?
            在请求头中有一个content-Type参数
        """
        前后端交互数据的时候 一定要做到数据个编码格式的一致性
        """
        1.需要手动指定编码格式
            contentType:'application/json'
        2.一定要确保数据也是符合json格式的
            data:JSON.stringify({'username':'jason'})
        
        # django后端针对json格式的数据 是不会做任何处理的  会原封不动的放在request.body中
        你可以手动去处理获取数据
            
            1.将bytes类型转成json格式字符串
            2.利用json模块json.loads反序列化出来

Ajax发送文件

    ajax传输文件
        ajax传文件 需要使用到js内置对象  FormData
        该对象及可以携带普通的键值对 给django后端的request.POST也可以携带文件给django后端的request.FILES
        
        # 1.现生成一个formdata对象
        var MyFormData = new FormData();
        # 2.添加普通的键值对
        MyFormData.append('username','jason');
        MyFormData.append('password','123');
        # 3.添加文件
        var fileObj = $('#myfile')[0].files[0];
        MyFormData.append('myfile',fileObj)
        """
        如何获取type=file的input标签存储的用户上传文件
        """
        $.ajax({
            url:'',
            type:'post',
            data:MyFormData,
            # 需要手动指定两个关键性的参数
            contentType:false,
            processData:false,
            success:function(data){
                ...
            }
       
        })  

Ajax+sweetalert

$("#b55").click(function () {
    swal({
                title: "你确定要删除吗?",
                text: "删除可就找不回来了哦!",
                type: "warning",
                showCancelButton: true,  // 是否显示取消按钮
                confirmButtonClass: "btn-danger",  // 确认按钮的样式类
                confirmButtonText: "删除",  // 确认按钮文本
                cancelButtonText: "取消",  // 取消按钮文本
                closeOnConfirm: false,  // 点击确认按钮不关闭弹框
                showLoaderOnConfirm: true  // 显示正在删除的动画效果
            },
            function () {
                var deleteId = 2;
                $.ajax({
                    url: "/delete_book/",
                    type: "post",
                    data: {"id": deleteId},
                    success: function (data) {
                        if (data.code === 0) {
                            swal("删除成功!", "你可以准备跑路了!", "success");
                        } else {
                            swal("删除失败", "你可以再尝试一下!", "error")
                        }
                    }
                })
            });
})
posted @ 2019-10-31 18:49  zmy泳  阅读(217)  评论(0编辑  收藏  举报