django7/ajax
AJAX
AJAX简介
AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML,现在更多使用json数据).
页面不刷新的情况下,可以与后端进行数据交互,特点,异步提交,局部刷新。
ajax不是一门全新知识,本质是一些js代码,我们直接使用jQuery封装之后的版本(语法更加简单)
使用ajax的前提必须要引入jQuery文件
优点:
- AJAX使用JavaScript技术向服务器发送异步请求;
- AJAX请求无须刷新整个页面;
- 因为服务器响应内容不再是整个页面,而是页面中的部分内容,所以AJAX性能高;
- 两个关键点:1.局部刷新,2.异步请求
1.ajax基础语法
$.ajax({
url:'', 控制数据的提交地址
type:'', 控制请求方式(默认get请求)
data:{}, 组织提交的数据
success:function(形参){
异步回调函数
}
})
# html
<script>
let i1Val=$('#i1').val();
let i2Val = $('#i2').val();
$('#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>
# views
def index(request):
print(request.is_ajax()) # 可以判断是否是ajax请求
print(request.POST) # ajax携带的数据传给了request.POST
if request.is_ajax():
if request.method=='POST':
a=request.POST.get('i1')
b=request.POST.get('i2')
res=int(a)+int(b)
return HttpResponse(res) # HttpResponse返回的数据被异步回调函数的参数接收
return render(request,'index.html')
前后端传输数据编码格式
请求体中携带编码格式
Content-Type: ...
django针对不同编码方式对应的数据格式会采用不同的处理策略.
form表单默认发送的编码格式:
Content-Type: application/x-www-form-urlencoded
数据格式:i1=11&i2=11,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前后端传输数据编码格式
请求体中携带编码格式
Content-Type: ...
django针对不同编码方式对应的数据格式会采用不同的处理策略.
form表单默认发送的编码格式:
Content-Type: application/x-www-form-urlencoded
数据格式:i1=11&i2=11,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格式数据和携带文件数据
ajax发送json格式数据
form表单是无法发送json格式数据的!!!ajax发送的数据类型一定要跟数据的编码格式一致。
$('#d1').click(function () {
$.ajax({
url:'',
type:'post', # 不写默认也是get请求
contentType:'application/json', # 不写默认是urlencoded编码
data:JSON.stringify({'name':'jason','pwd':123}), # 序列化方法
success:function (args) {
}
})
})
django后端真多json格式的数据不会做任何的处理,就在request.body内
需要我们自行处理,我们可以自己反序列化数据。
res=request.body
import json
json_dict=json.loads(res) # json.loads自带解码功能
ajax携带文件数据
$("#d1").click(function () {
# 需要利用内置js内置对象FormData
let myFormData = new FormData();
# 对象添加普通数据 django自动识别放在request.POST里
myFormData.append('username',$('#name').val())
myFormData.append('password',$('#pwd').val())
# 对象添加文件数据 django自动识别放在request.Files里
myFormData.append('my_file',$('#file')[0].files[0])
# 发送ajax请求
$.ajax({
url:'',
type:'post',
data:myFormData,
# 携带文件必须要指定的两个参数
contentType:false,
processData:false,
success:function (args) {
# 处理异步回调返回的结果
}
})
})
回调机制处理策略
使用ajax交互,所有的操作都不再直接影响整个页面(局部操作)
如果想要在Ajax里也可以跳转网页等操作,可以给异步回调函数有一个网页,然后通过前端的window.location.href去接收异步回调函数的值就可以实现。