ajax简介、前后端传输数据编码格式、ajax发送json格式数据、ajax携带文件数据
ajax简介#
页面不刷新的情况下可以与后端进行数据交互
异步提交 局部刷新
eg:码云用户注册 无需点击按钮内部也可完成数据交互
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>
<script>
$('#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>
# 后端代码
def add(request):
print(request.is_ajax()) # 判断是否是ajax请求
if request.is_ajax():
if request.method == 'POST':
print(request.POST)
i1 = request.POST.get('i1')
i2 = request.POST.get('i2')
i3 = int(i1) + int(i2)
return HttpResponse(i3)
return render(request, 'add.html', )
前后端传输数据编码格式#
"""
请求体中携带编码格式
Content-Type:...
django针对不同编码方式对应的数据格式会采用不同的处理策略
"""
# form表单默认发送的编码格式
Content-Type: application/x-www-form-urlencoded
数据格式:username=tuzi&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=tuzi&password=123
django后端会自动处理到:request.POST
ajax发送json格式数据#
# form表单是无法发送json格式数据的!!!
# request.is_ajax()判断当前请求是否是ajax请求 返回布尔值
ajax发送的数据类型一定要跟数据的编码格式一致
编码格式是urlencoded
数据格式就应该是username=jason&password=123
但是你却发送了json格式数据
django后端针对json格式的数据不会做任何的处理 就放在request.body内
# 前端代码
<button id="d1">发送json格式数据</button>
<script>
$('#d1').click(function (){
$.ajax({
url:'',
type:'post', // 不写默认是get请求
contentType:'application/json', // 不写默认是urlencoded编码
data:JSON.stringify({'name':'tuzi','pwd':123}), // 进行JSON序列化
success:function (args){
}
})
})
</script>
# 后端代码
def add(request):
print(request.is_ajax()) # 判断是否是ajax请求
if request.method == 'POST':
print(request.POST)
print(request.body)
json_bytes = request.body
import json
json_dict = json.loads(json_bytes) # json.loads方法自带解码功能,无需自己decode
print(json_dict, type(json_dict))
return render(request, 'add.html', )
ajax携带文件数据#
# 前端代码
<input type="text" id="name">
<input type="text" id="pwd">
<input type="file" id="file">
<button id="d1">发送ajax请求</button>
<script>
$("#d1").click(function (){
// 需要利用内置js内置对象FormData
let myFormData = new FormData();
// 对象添加普通数据
myFormData.append('name',$('#name').val())
myFormData.append('pwd',$('#pwd').val())
// 对象添加文件数据
myFormData.append('file',$('#file')[0].files[0])
// 发送ajax请求
$.ajax({
url:'',
type:'post',
data:myFormData,
// 携带文件必须要指定的两个参数
contentType:false,
processData:false,
success:function (args){
// 处理异步回调返回的结果
}
})
})
</script>
# 后端代码
def add(request):
print(request.is_ajax()) # 判断是否是ajax请求
if request.method == 'POST':
print(request.POST)
print(request.FILES)
print(request.body)
return render(request, 'add.html', )
归纳#
# 1.需要利用内置对象FormData
// 2 添加普通的键值对
formDateObj.append('username',$('#d1').val());
formDateObj.append('password',$('#d2').val());
// 3 添加文件对象
formDateObj.append('myfile',$('#d3')[0].files[0])
# 2.需要指定两个关键性的参数
contentType:false, // 不需使用任何编码 django后端能够自动识别formdata对象
processData:false, // 告诉你的浏览器不要对你的数据进行任何处理
# 3.django后端能够直接识别到formdata对象并且能够将内部的普通键值自动解析并封装到request.POST中 文件数据自动解析并封装到request.FILES中
回调机制处理策略#
使用ajax交互 所有的操作都不再直接影响整个页面(局部操作)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?