Ajax
前戏
概念
异步提交,局部刷新
最大的优点是在页面不刷新的情况下可以与后端进行数据交互
用户注册无需点击按钮内部也可完成数据交互
- 同步交互:客户端发出一个请求后,需要等待服务器响应结束后,才能发出第二个请求
- 异步交互:客户端发出一个请求后,无需等待服务器响应结束,就可以发出第二个请求
与form表单的区别
学习ajax一定要能够发现提交数据的区别
ajax提交数据
页面不用刷新,原始数据还在,处理数据的过程中不影响页面其他操作
form表单提交数据
页面刷新,原始数据不在,处理数据的过程中无法做其他操作
需求
页面上有三个input框和一个提交按钮,前两个框输入数字,点击按钮,最后一个框里面展示数字的和,并且页面不能刷新
代码展示
ajax_test.html
<input type="text" id="i1"> + <input type="text" id="i2"> = <input type="text" id="i3"> <button id="b1">Ajax Test</button> <script src="/static/jquery-3.3.1.min.js"></script> <script> $('#b1').click(function () { $.ajax({ url:'', type:'POST', data:{i1:$('#i1').val(),i2:$('#i2').val()}, success:function (data) { $('#i3').val(data) } }) }) </script>
views.py
def ajax_test(request): if request.method=='POST': i1=request.POST.get('i1') i2=request.POST.get('i2') ret=int(i1)+int(i2) return HttpResponse(ret) return render(request,'ajax_test.html')
$('#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)
}
})
})
数据格式:username = shun & password = 123
django后端自动处理到:request.POST
form表单发送文件
Content-Type: multipart/form-data
数据格式:隐藏不让看
django后端会自动处理到:request.POST request.FILES
Ajax
ajax默认的编码格式:Content-Type: application/x-www-form-urlencoded
数据格式:username = jason & password = 123
django后端会自动处理到:request.POST
django针对不同编码方式对应的数据格式会采用不同的处理策略
$('#d1').click(function () { $.ajax({ url:'', type:'post', // 不写默认也是get请求 contentType:'application/json', // 不写默认是urlencoded编码 data:JSON.stringify({'name':'jason','pwd':123}), // 序列化方法 success:function (args) { } }) })
$("#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) { // 处理异步回调返回的结果 } }) })
异步回调参数