zoukankan      html  css  js  c++  java
  • Ajax相关

    Ajax

    Ajax的特性可以实现异步提交与局部刷新。

    Ajax是一门js的技术 基于原生js开发的,但是用原生的js写代码过于繁琐, 我们在学的时候 只学如何用jQuery实现ajax。

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

    异步提交
    同步异步:描述的任务的提交方式
    同步:提交任务之后 原地等待任务的返回结果 期间不干任何事儿
    异步:提交任务之后 不愿地等待 直接执行下一行代码 任务的返回通过回调机制

    局部刷新
    一个页面 不是整体刷新 而是页面的某个地方局部刷新

    实例

    1.展示一个前端页面  页面上有三个输入框  前两个框输入数字 点击按钮朝后端发请求
    页面不刷新的情况下 完成数字的加法运算
        
    方法1:不用JSON
    前端:
    <input type="text" id="t1"> +
    <input type="text" id="t2"> =
    <input type="text" id="t3">
    <input type="submit" id="b1">
    
    <script>
        $('#b1').on('click', function () {
            $.ajax({
                // 1.朝后端发送数据的地址,空即为当前地址
                url: '', //提交的目标地址
                //2. 发送的请求方式
                type: 'post',
                //3 发送的数据
                data: {'t1': $('#t1').val(), 't2': $('#t2').val()},
                success: function (data) {
    				//由于ajax是异步提交,所以需要一个回调函数,在提交的结果返回到时执行
                    //这里的data是views那边返回的结果
                    $('#t3').val(data)
                }
            })
        })
    </script>
    后端:
    class Ajax(View):
        def post(self, request):
            if request.is_ajax():
                t1 = request.POST.get('t1')
                t2 = request.POST.get('t2')
                res = int(t1) + int(t2)
                return HttpResponse(res)
    
        def get(self, request):
            return render(request, 'ajax.html')
    
    方法二:JSON交互数据
    前端:
    <input type="text" id="t1"> +
    <input type="text" id="t2"> =
    <input type="text" id="t3">
    <input type="submit" id="b1">
    
    <script>
        $('#b1').on('click', function () {
            $.ajax({
                // 1.朝后端发送数据的地址,空即为当前地址
                url: '', //提交的目标地址
                //2. 发送的请求方式
                type: 'post',
                //发送数据的格式
                contentType:'application/json',
                //3 发送的数据
                data: JSON.stringify({'t1': $('#t1').val(), 't2': $('#t2').val()}),
                success: function (data) { //这里的data是views那边返回的结果
                    $('#t3').val(data)
                }
            })
        })
    
    </script>
    
    后端:
    class Ajax(View):
        def post(self, request):
            if request.is_ajax():
                json_bytes=request.body
                json_str=json_bytes.decode('utf8')
                json_dic=json.loads(json_str)
                print(json_dic,type(json_dic))
                res=int(json_dic.get('t1'))+int(json_dic.get('t2'))
                return JsonResponse(res,safe=False)
    
    

    注:

    form表单的默认的提交数据的编码格式是urlencoded(username=admin&password=123)

    django后端针对username=admin&password=123的urlencoded数据格式会自动解析,然后将结果打包给request.POST 用户只需要从request.POST即可获取对应信息。

    传输文件时django后端针对formdata格式类型数据 也会自动解析,但是不会方法request.POST中而是给你放到了request.FILES中。

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

    ajax传文件

        //传文件
        //1生成一个formdata对象
        var MyFormData=new FormData()
        //2往对象中添加键值对
        MyFormData.append('username',$('#t1').val())
        MyFormData.append('pwd','123')
            //  jquer查找上传文件的标签 $('#t3')
            //jquery转换成js对象 $('#t3')[0]
            // js对象.files取到的是一个容器,取第一个  $('#t3')[0].files[0]
        MyFormData.append('file',$('#t3')[0].files[0])
        //然后设置ajax
        $.ajax({
            url:'',
            type:'post',
    
            //ajax传文件必须设定2个false
            contentType:false, //不需要任何编码,fromdata自带编码,django能识别该对象
            processData:false,//告诉浏览器不需要处理该数据
    
            data:MyFormData //数据直接丢对象进去
    
            sueccess:function (data) {
                //回调函数
    
            }
        })
    
    

    序列化组件

    1.将用户表的数据 查询出来 返回给前端
    给前端的是一个大字典 字典里面的数据的一个个的字段
    from django.core import serializers
    def ser(request):
    user_queryset = models.Userinfo.objects.all()
    # [{},{},{},{}]
    # user_list = []
    # for user_obj in user_queryset:
    #     user_list.append({
    #         'username':user_obj.username,
    #         'password':user_obj.password,
    #         'gender':user_obj.get_gender_display(),
    #     })
    res = serializers.serialize('json',user_queryset)
    print(res)
    return render(request,'ser.html',locals())
    

    sweetalert+ajax

    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")
                            }
                        }
                    })
                });
    })
    
  • 相关阅读:
    vue $emit的使用
    flask config 环境变量配置
    get请求
    下载及安装
    测试用例写作
    系统测试
    测试方法
    软件质量
    测试基础
    子网掩码
  • 原文地址:https://www.cnblogs.com/Sheppard/p/11755401.html
Copyright © 2011-2022 走看看