Ajax
Ajax简介
页面不刷新的情况下可以与后端进行数据交互
异步提交 局部刷新
eg:码云用户注册 无需点击按钮内部也可完成数据交互
ajax不是一门全新知识 本质就是一些js代码 我们学习ajax直接使用jQuery封装之后的版本(语法更加简单) 使用ajax的前提必须要引入jQuery文件
# 前戏
学习ajax一定要能够发现与form表单提交数据的区别
ajax提交数据页面不用刷新 原始数据还在 处理数据的过程中不影响页面其他操作
form表单提交数据页面刷新 原始数据不在 并且处理数据的过程中无法做其他操作
# Ajax实现简易计算器
# 前端
<body>
<div>
<input type="text" id="i1">+<input type="text" id="i2">=<input type="text" id="i3">
<botton id="btn" class="btn bg-success">提交</botton>
</div>
<script>
$('#btn').click(function () {
// 获取两个值
let a = $('#i1').val();
let b = $('#i2').val();
// 发送ajax请求后端处理数据
$.ajax({
url:'', // 不写默认发送到当前页面后端
type:'post', // 请求方式
data:{ // 请求携带的数据
i1:a,
i2:b
},
success:function (arg) { // 请求成功后调用的函数
$('#i3').val(arg)
}
})
})
</script>
</body>
# 后端
def index(request):
if request.is_ajax(): # 判断是否是ajax请求
if request.method == 'POST':
# 获取携带的数据
i1 = request.POST.get('i1')
i2 = request.POST.get('i2')
i3 = int(i1) + int(i2)
return HttpResponse(i3)
return render(request,'index.html')
![]()
前后端传输数据编码格式
"""
请求体中携带编码格式
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内
后端需要自行处理数据
"""
# 前端
$('#json').click(function () {
$.ajax({
url: '',
type: 'post', // 不写默认get
contentType: 'application/json', // 不写默认是urlencode编码
data: JSON.stringify({"name":"petter","age":18}),
success:function (args) {
}
})
})
# 后端
def index(request):
if request.is_ajax(): # 判断是否是ajax请求
if request.method == 'POST':
res = request.body
print(res)
return HttpResponse()
![]()
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) {
// 处理异步回调返回的结果
}
})
})
回调机制处理策略
使用ajax交互 所有的操作都不再直接影响整个页面(局部操作)