ajax入门

ajax简介

页面不刷新的情况下可以与后端进行数据交互

两个特点

  1. 异步提交
  2. 局部刷新

ajax与form表单的区别

ajax提交数据页面不用刷新 原始数据还在 处理数据的过程中不影响页面其他操作
form表单提交数据页面刷新 原始数据不在 并且处理数据的过程中无法做其他操作

简单案例

# 简易加法运算 
# 需求:页面有三个input框和一个提交按钮,前两个框输入数字;点击按钮最后一个框展示前两个数字的和并且页面不能刷新
<body>
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <br><br><br>
            {#    <input type="text" id="i1">+<input type="text" id="i2">=<input type="text" id="i3">#}
            数字1<input type="text" name="n1" id="d1" class="form-control">
            <br>
            数字2<input type="text" name="n2" id="d2" class="form-control">
            <br>
            数字3<input type="text" name="n3" id="d3" value="{{ n3 }}" class="form-control">
            <br>
            <input type="button" value="计算" id="btn" class="btn bg-info btn-block">
        </div>
    </div>
</div>
</body>
<script>
            $('#btn').click(function () {
            // 获取两个框里面的数据
            let i1Val = $('#d1').val();
            let i2Val = $('#d2').val();
            // 发送ajax请求传输数据
            $.ajax({
                url:'',  // 不写默认就是当前页面所在的地址
                type:'post', // 指定当前请求方式
                data:{'n1':i1Val,'n2':i2Val},  // 请求携带的数据
                success:function (args) {  // 异步回调函数,后端有回复自动触发
                    $('#d3').val(args)
                }
            })
        })

            $('#d1').on('input',function () {
            $.ajax({
                url:'',
                type:'get',
                data:{'d1':$(this).val()},
                success:function (args) {
                    alert(args)
                }
            })
        })

</script>
def add(request):
    print(request.is_ajax())
    if request.is_ajax():
        if request.method == 'POST':
            print(request.POST)
            n1 = request.POST.get('n1')
            n2 = request.POST.get('n2')
            print(n1, n2)
            n3 = int(n1) + int(n2)
            return HttpResponse(n3)
    return render(request, 'add.html')

前后端传输数据编码格式

请求体中携带编码格式
	Content-Type:具体格式
django针对不同编码方式对应的数据格式会采用不同的处理策略
# form表单默认发送的编码格式
  Content-Type: application/x-www-form-urlencoded
  数据格式:username=linda&password=qwer123
  django后端会自动处理到:request.POST
# form表单发送文件
	Content-Type: multipart/form-data
  数据格式:隐藏
  django后端会自动处理:request.POST  request.FILES
# ajax默认的编码格式
  Content-Type: application/x-www-form-urlencoded
  数据格式:username=linda&password=qwer123
  django后端会自动处理到:request.POST

ajax发送json格式数据

# form表单无法发送json格式数据
ajax发送的数据类型一定要跟数据的编码格式一致 
    编码格式是urlencoded 
    数据格式就应该是username=linda&password=1234
# django后端针对json格式的数据不会做任何的处理,存在request.body内,需单独处理

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

ajax携带文件数据

$("#d1").click(function () {
        // 需要利用内置js内置对象FormData
        let myFormData = new FormData();
        // 对象添加普通数据
        myFormData.append('username',$('#name').val())
        myFormData.append('password',$('#pwd').val())
        // 对象添加文件数据
        myFormData.append('my_file',$('#file')[0].files[0])
        // 发送ajax请求
        $.ajax({
            url:'',
            type:'post',
            data:myFormData,
            // 携带文件必须要指定的两个参数
            contentType:false,
            processData:false,
            success:function (args) {
                // 处理异步回调返回的结果
            }
        })
    })
posted @ 2022-05-19 23:35  一梦便是数千载  阅读(19)  评论(0编辑  收藏  举报