小白学Django-----------初识Ajax

Ajax

一.什么是Ajax

AJAX(Asynchronous Javascript And XML),就是“异步Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML,现在更多使用json数据)。

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

AJAX除了异步的特点外,还有一个就是:浏览器页面局部刷新;(这一特点给用户的感受是在不知不觉中完成请求和响应过程)

优点:

  • AJAX使用Javascript技术向服务器发送异步请求
  • AJAX无须刷新整个页面

二.基于jquery的Ajax简单实现

test1.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="" method="post">
    用户名: <input type="text" name="user" id="user"> <br>
    密码: <input type="password" name="pwd" id="pwd"> <br>
    <button>POST提交</button>
</form>
<button id="btn">Ajax提交</button>
</body>
<script src="/static/jquery/jquery-3.3.1.js"></script>
<script>
        $('#btn').click(function () {
            let user = $('#user').val();
            let pwd = $('#pwd').val();
            $.ajax({
                url:'/test1/',
                type:'get',
                data:{'name':user,'pwd':pwd},
                success:function (data) {
                    alert(data)
                }
            })
        })
</script>
</html>
views.py
def test1(request):
    user = request.GET.get('name')
    pwd = request.GET.get('pwd')
    if user == 'tom' and pwd == '123':
        return HttpResponse('登录成功')
    return HttpResponse('用户名或密码错误')
Ajax执行流程
根据ajax里面的url匹配到views.py文件里面的视图函数,然后发个请求(看type是什么请求),然后视图函数做一系列的处理,然后return给了ajax里面的data。因为是异步的,所以视图函数处理时不影响ajax后面的代码执行。一旦有数据return时,执行success内的函数代码。

在这里插入图片描述

三.案例

3.1 通过Ajax,实现前端输入两个数字,服务器做加法,返回到前端页面

视图函数
def test_ajax(requests):
    n1=int(requests.POST.get('n1'))
    n2=int(requests.POST.get('n2'))
    return HttpResponse(n1+n2)
html代码
<input type="text" id="num1">+<input type="text" id="num2">=<input type="text" id="sum">
<button id="submit">计算</button>
JS代码
$("#submit").click(function () {
        $.ajax({
            url: '/test_ajax/',
            type: 'post',
            data: {
                n1: $("#num1").val(),
                n2: $("#num2").val()
            },
            success: function (data) {
                console.log(data)
                $("#sum").val(data)
            },

        })
    })

3.2 基于Ajax进行登录验证

视图函数
def auth(request):
    back_dic={'user':None,'message':None}
    name=request.POST.get('user')
    password=request.POST.get('password')
    print(name)
    print(password)
    user=models.user.objects.filter(name=name,password=password).first()
    print(user)
    # print(user.query)
    if user:
        back_dic['user']=user.name
        back_dic['message']='成功'
    else:
        back_dic['message']='用户名或密码错误'
    import json
    return HttpResponse(json.dumps(back_dic))
JS代码
$("#submit3").click(function () {
            $.ajax({
                url: '/auth/',
                type: 'post',
                data: {
                    'user': $("#id_name").val(),
                    'password': $('#id_password').val()
                },

                success: function (data) {
                    {#console.log(data)#}
                    var data=JSON.parse(data)
                    if (data.user){
                        location.href='https://www.baidu.com'
                    }else {
                        $(".error").html(data.message).css({'color':'red','margin-left':'20px'})
                    }
                }
            })
        }
    )

四.基于Ajax提交json格式数据(简单版)

html+js代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="" method="post">
    用户名: <input type="text" name="user" id="user"> <br>
    密码: <input type="password" name="pwd" id="pwd"> <br>
    <button>POST提交</button>
</form>
<button id="btn">Ajax提交</button>
</body>
<script src="/static/jquery/jquery-3.3.1.js"></script>
<script>
        $('#btn').click(function () {
            let user = $('#user').val();
            let pwd = $('#pwd').val();
            let s = JSON.stringify({'name':user,'pwd':pwd});  //json格式字符串
            let t = JSON.parse(s);  //反转回来
            $.ajax({
                url:'/test3/',
                type:'post',
                contentType:'application/json', //默认是urlencoded
                data:s,
                dataType:'json', //响应回来解析的方式
                success:function (data) {
                    alert(data)
                }
            })
        })


</script>
</html>
视图函数
def test3(request):
    if request.method == 'POST':
        #只处理了urlencoding编码的参数:name='tom'&pwd='123'
        # 前端提交的json格式数据,需要自己处理
        # 提交到服务器的数据都在 request.body 里,取出来自行处理
        print(request.body)
        import json
        res = request.body.decode('utf-8')
        res_dic = json.loads(res)
        print('res_dic===>',res_dic)
        if res_dic['name'] == 'tom' and res_dic['pwd'] == '123':
            return HttpResponse('登录成功')
        return HttpResponse('用户名密码错误')

五,基于Ajax简单上传文件

html+js代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件上传</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
    用户名: <input type="text" name="user" id="user"> <br>
    密码: <input type="password" name="pwd" id="pwd"> <br>
    文件: <input type="file" name="myfile" id="myfile"> <br>
    <button>提交</button>
</form>
<button id="btn">ajax提交</button>
</body>
<script src="/static/jquery/jquery-3.3.1.js"></script>
<script>
    $('#btn').click(function () {
        let formdata = new FormData(); //生成一个Formdata对象
        formdata.append('myfile',$('#myfile')[0].files[0]);
        formdata.append('name',$('#user').val());
        formdata.append('pwd',$('#pwd').val());
        $.ajax({
            url:'/test4/',
            type:'post',
            contentType:false, //告诉jQuery不要去处理发送的数据
            processData:false, // 告诉jQuery不要去设置Content-Type请求头
            data:formdata,
            success:function (data) {
                alert(data)
            }

        })
    })
</script>
</html>
视图函数
def test4(request):
    if request.method == 'POST':
        name = request.POST.get('name')
        pwd = request.POST.get('pwd')
        file = request.FILES.get('myfile')
        file_name = file.name
        with open(file_name,'wb') as f:
            for line in file:
                f.write(line)
        return HttpResponse('ok')

猜你喜欢

转载自blog.csdn.net/qq_42721964/article/details/84257733
今日推荐