使用ajax进行前后台的数据交互

1 什么是ajax:

​ 异步的JavaScript和xml,跟后台交互,都用json

2 ajax干啥用的?

​ 前后端做数据交互:

3 特点:

​ -异步(异步和同步的区别:同步是请求发过去,要等着回应;异步:不需要等回应,可以进行其他操作)
​ -局部刷新:

4 使用ajax实现一个简单的文件上传页面

前端页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="/static/jquery-3.3.1.js"></script>
    <title>Title</title>
</head>
<body>
<form action="/files/" method="post" enctype="multipart/form-data">
    <p>用户名:<input type="text" name="name" id="name"></p>

    <p><input type="file" name="myfile" id="myfile"></p>

    <input type="submit" value="提交">

</form>
<button id="btn">ajax提交文件</button>

</body>
<script>
    $("#btn").click(function () {
        //上传文件,必须用FormData
        var formdata=new FormData();
        formdata.append('name',$("#name").val());
        //取出文件$("#myfile")[0].files拿到的是文件列表,取第0个把具体的文件取出来
        formdata.append('myfile',$("#myfile")[0].files[0]);

        $.ajax({
            url:'/files_ajax/',
            type:'post',
            //不预处理数据,(name=lqz&age=18)
            processData:false,
            //指定往后台传数据的编码格式(urlencoded,formdata,json)
            //现在用formdata对象处理了,就不需要指定编码格式了,不要给我编码了
            contentType:false,
            data:formdata,
            success:function (data) {
                alert(data)

            }
        })

    })

</script>
</html>

后台views.py中的页面

def files_ajax(request):
    # 提交文件从,request.FILES中取,提交的数据,从request.POST中取
    name=request.POST.get('name')
    print(name)
    dic_files = request.FILES
    myfile = dic_files.get('myfile')
    with open(myfile.name, 'wb') as f:
        # 循环上传过来的文件
        for line in myfile:
            # 往空文件中写
            f.write(line)
    return HttpResponse('ok')

5 基于ajax提交json格式的数据(简单的用户登录认证)

前端页面

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>登录验证</title>
    <script src="/static/jquery-3.3.1.js"></script>
</head>
<body>
<form>
    <p>用户名:<input type="text" name="user" id="name"></p>
    <p>密码:<input type="password" name="pwd" id="pwd"></p>
</form>
<button id="btn">提交</button>
<p class="test"></p>
</body>
<script>
    $('#btn').click(function () {
        var dic = {'name':$('#name').val(),'pwd':$('#pwd').val()};
        var msg = JSON.stringify(dic);
        var $test = $('.test');
        $.ajax({
            url:'/login/',
            type:'post',
            //指定请求的数据格式为json
            contentType:'application/json',
            data:msg,
            //指定响应的格式为json,注意如果后台没有放回json类型的数据格式下方的success不会执行
            dataType:'json',
            success:function (res) {
                data = JSON.parse(res);
                if (data == '2'){
                    $test.text('登录失败!')
                } else if (data == '1'){
                    location.href='https://www.baidu.com/'
                }
            }
        });
    });
</script>
</html>

后台views.py中的内容

from django.shortcuts import render, redirect, HttpResponse
import json
from loginapp.models import *


# Create your views here.
def login(request):
    if request.method == 'GET':
        return render(request, 'login.html')
    if request.method == "POST":

        msg = json.loads(request.body.decode('utf-8'))
        print(msg)
        res = User.objects.filter(user=msg['name'], pwd=msg['pwd']).first()
        if res:
            return HttpResponse(json.dumps('1'))
        else:
            return HttpResponse(json.dumps('2'))

posted @ 2018-11-19 19:25  周建豪  阅读(1989)  评论(0编辑  收藏  举报