Django day08(ajax json格式数据、文件数据)

ajax简介

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

ajax 本质就是一些js代码   我们学习ajax直接使用jQuery封装之后的版本(语法更加简单)   
     使用ajax的前提必须要引入jQuery文件
# ajax与form表单提交数据的区别:
ajax 提交数据页面不用刷新 原始数据还在 处理数据的过程中不影响页面操作
form 表单提交数据页面刷新 原始数据不在 处理数据的过程中无法操作
页面上有三个input框和一个提交按钮 前两个框输入数字 点击按钮 最后一个框里面展示数字的和 并且页面不能刷新
<input type="text" id="i1">+<input type="text" id="i2">=<input type="text" id="i3">
    <button id="btn">计算</button>
    
$('#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)
                }
            })
        })    

前后端传输数据编码格式

"""
请求体中携带编码格式
	Content-Type:...
django针对不同编码方式对应的数据格式会采用不同的处理策略
"""
form表单默认发送的编码格式
	Content-Type: application/x-www-form-urlencoded
  数据格式: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格式数据

# form表单是无法发送json格式数据的!!!
ajax发送的数据类型一定要跟数据的编码格式一致 
 如:编码格式是urlencoded 
    数据格式就应该是username=jason&password=123
    但是你却发送了json格式数据
    
"""
django后端针对json格式的数据不会做任何的处理 就在request.body内
需要我们自行处理
"""    

$('#btn1').click(function () {
            $.ajax({
                url:'',	// 不写默认当前页面所在地址
                type:'post', //  不写默认get
                contentType:'application/json',     // 不写默认是urlencoded编码
                data:JSON.stringify({'name':'horizon', 'pwd': 123}),    // 序列化
                success:function (args) {

                }
            })
        })

    if request.method == 'POST':
        print(request.POST)     # <QueryDict: {}>
        print(request.body)     # b'{"name":"horizon","pwd":123}'
        json_bytes = request.body
        import json
        json_dict = json.loads(json_bytes)  # json.loads方法自带解码功能 无需自行decode()
        print(json_dict)    # {'name': 'horizon', 'pwd': 123}

ajax携带文件数据

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

回调机制处理策略

使用ajax交互 所有的操作都不再直接影响整个页面(局部操作)
posted @   扶我上码  阅读(43)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示