1. 程式人生 > >使用ajax進行前後臺的資料互動

使用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'))