Ajax

Ajax

异步提交 局部刷新
'''
异步:提交任务之后不原地等待结果,任产生结果后通过异步回调机制返回结果
同步:提交任务之后原地等待结果,期间不做任何事
'''
Ajax页面案例:博客园注册页面,GitHub注册页面

能够发送网络请求的方法啊
a标签       get请求
form表单    get请求、post请求
ajax        get请求、post请求

Ajax不是一门独立的语言,而是一个功能
能够实现Ajax功能的书写方式有很多:原生js代码、jQuery封装代码、组件框架代码
目前只是学习jQuery版本

基本语法

$.ajax({
    url:'',  // 控制提交地址    规律与form标签的action参数一致
    type:'post',  // 控制请求方式
    data:{},  // 发送的数据
    dataType:'JSON',  // 自动反序列
    success:function (args) {
            // 异步回调函数
            alert(typeof args);
            console.log(args.username)
    }
})

参数补充

content Type :前后端数据传输的格式
	application/x-www-form-urlencoded
	multipart/form-data
	application/json
    朝后端发送数据时,针对不同的发送方式方式后端有不同的处理方式
    
    # 1.form表单默认的是form-urlencoded格式
    	Django后端针对form-urlencoded格式的数据 会自动解析并封装到request.POST中
    	Django后端针对form-data格式的数据,会将文件自动封装到request.FILES中,普通符合form-urlencoded的数据会封装到request.POST中
    # 2.ajax 默认的也是form-urlencoded格式
    	# 2.1.发送json格式的数据
    	Django后端不会做任何处理,直接以二进制形式存放在request.body中
        data:JSON.stringify(data)
        contentTypr:'application/json'
    	# 2.2.ajax发送文件
    	// 1. 先生成一个内置对象
    	let formDataObj = new FormData();
        // 2. 添加urlencoded格式的普通键值对数据(非文件数据)
        formDataObj.append('name':'zsn')
        formDataObj.append('password':123)
        // 3.添加文件数据
        // 第一个参数放类似于input框的那么属性,第二个参数放文件对象
        formDataObj.append('myfile',$('#myfile')[0].files[0]);
        // ajax发送给后端
        $.ajax({
			url:'',  // 控制提交地址    规律与form标签的action参数一致
			type:'post',  // 控制请求方式
			data:formDataObj,  // 发送的数据
			// 额外指定两个参数
			contentType:false,  // 不采用任何编码 后端能够直接识别formData对象
			processData:false,  // 不处理formData对象 直接发送即可
			success:function (args) {
                    }
                })
        
dataType 
	Django后端如果使用jsonResponse给回调函数返回json格式字符串,回调函数会自动反序列化成js中的自定义对象
    Django后端如果不适用jsonResponse给回调函数返回json格式字符串,回调函数收到后不会自动反序列化
    设置了 dataType:'JSON' 后,回调函数无论哪种都会自动反序列化

Django内置序列化模块

from django.core import serializers
def ab_ser(request):
    book_queryset = models.Book.objects.all()
    res = serializers.serialize('json',book_queryset)
    return HttpResponse(res)

借助于插接完成二次确认弹框

先下载Bootstrap-sweetalert项目 https://github.com/lipis/bootstrap-sweetalert
导入dist中的css文件和js文件

 $("#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}, // 将id编号当数据传给后端,不用反向解析
                        success: function (data) {
                            if (data.code === 0) {
                                swal("删除成功!", "你可以准备跑路了!", "success");
                            } else {
                                swal("删除失败", "你可以再尝试一下!", "error")
                            }
                        }
                    })
                });
    })

posted @ 2021-06-30 20:36  zheng-sn  阅读(13)  评论(0)    收藏  举报