django7/ajax

AJAX

AJAX简介

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

页面不刷新的情况下,可以与后端进行数据交互,特点,异步提交,局部刷新。

ajax不是一门全新知识,本质是一些js代码,我们直接使用jQuery封装之后的版本(语法更加简单)

使用ajax的前提必须要引入jQuery文件

优点:

  • AJAX使用JavaScript技术向服务器发送异步请求;
  • AJAX请求无须刷新整个页面;
  • 因为服务器响应内容不再是整个页面,而是页面中的部分内容,所以AJAX性能高;
  • 两个关键点:1.局部刷新,2.异步请求

1.ajax基础语法

	$.ajax({
        url:'',   控制数据的提交地址
        type:'',  控制请求方式(默认get请求)
        data:{},  组织提交的数据
        success:function(形参){
                异步回调函数
        }
    })
# html
<script>
    let i1Val=$('#i1').val();
    let i2Val = $('#i2').val();
    $('#btn').click(function () {
            # 获取两个框里面的数据
            let i1Val = $('#i1').val();
            let i2Val = $('#i2').val();
            # 发送ajax请求传输数据
            $.ajax({
                url:'',  # 不写默认就是当前页面所在的地址
                type:'post', # 指定当前请求方式
                data:{'i1':i1Val,'i2':i2Val},  # 请求携带的数据
                success:function (args) {  # 异步回调函数 后端有回复自动触发
                    $('#i3').val(args)
                }
            })
        })
</script>
# views
def index(request):
    print(request.is_ajax())  # 可以判断是否是ajax请求
    print(request.POST)  # ajax携带的数据传给了request.POST
    if request.is_ajax():
        if request.method=='POST':
            a=request.POST.get('i1')
            b=request.POST.get('i2')
            res=int(a)+int(b)
            return HttpResponse(res)  # HttpResponse返回的数据被异步回调函数的参数接收
    return render(request,'index.html')

前后端传输数据编码格式


请求体中携带编码格式

Content-Type: ...

django针对不同编码方式对应的数据格式会采用不同的处理策略.

form表单默认发送的编码格式:

Content-Type: application/x-www-form-urlencoded

数据格式:i1=11&i2=11,username=jason&password=123

django后端会自动处理到:request.POST

form表单发送文件:

Content-Type: multipart/form-data

数据格式:隐藏不让看

django后端会自动处理:request.POST ,request.FILES

ajax默认的编码格式:

Content-Type: application/x-www-form-urlencoded

数据格式:username=jason&password=123

django后端会自动处理到:request.POST前后端传输数据编码格式


请求体中携带编码格式

Content-Type: ...

django针对不同编码方式对应的数据格式会采用不同的处理策略.

form表单默认发送的编码格式:

Content-Type: application/x-www-form-urlencoded

数据格式:i1=11&i2=11,username=jason&password=123

django后端会自动处理到:request.POST

form表单发送文件:

Content-Type: multipart/form-data

数据格式:隐藏不让看

django后端会自动处理:request.POST ,request.FILES

ajax默认的编码格式:

Content-Type: application/x-www-form-urlencoded

数据格式:username=jason&password=123

django后端会自动处理到:request.POST

ajax发送json格式数据和携带文件数据


ajax发送json格式数据

form表单是无法发送json格式数据的!!!ajax发送的数据类型一定要跟数据的编码格式一致。

$('#d1').click(function () {
        $.ajax({
            url:'',
            type:'post',  # 不写默认也是get请求
            contentType:'application/json',  # 不写默认是urlencoded编码
            data:JSON.stringify({'name':'jason','pwd':123}),  # 序列化方法
            success:function (args) {
            }
        })
    })

django后端真多json格式的数据不会做任何的处理,就在request.body内
需要我们自行处理,我们可以自己反序列化数据。

res=request.body
import json
json_dict=json.loads(res)  # json.loads自带解码功能

ajax携带文件数据

$("#d1").click(function () {
        # 需要利用内置js内置对象FormData
        let myFormData = new FormData();
        # 对象添加普通数据  django自动识别放在request.POST里
        myFormData.append('username',$('#name').val())
        myFormData.append('password',$('#pwd').val())
        # 对象添加文件数据  django自动识别放在request.Files里
        myFormData.append('my_file',$('#file')[0].files[0])
        # 发送ajax请求
        $.ajax({
            url:'',
            type:'post',
            data:myFormData,
            # 携带文件必须要指定的两个参数
            contentType:false,
            processData:false,
            success:function (args) {
                # 处理异步回调返回的结果
            }
        })
    })

回调机制处理策略

使用ajax交互,所有的操作都不再直接影响整个页面(局部操作)
如果想要在Ajax里也可以跳转网页等操作,可以给异步回调函数有一个网页,然后通过前端的window.location.href去接收异步回调函数的值就可以实现。
posted @ 2022-09-07 22:13  名字长的像一只老山羊  阅读(32)  评论(0编辑  收藏  举报