ajax全称Asynchronous Javascript And XML(异步JavaScript和XML)
作用于从客户端给服务端发送消息
ajax是js自带的功能,不是新的语言,我们学习的是jQuery封装后的版本
ajax默认异步提交,局部刷新:当异步请求发出后,浏览器可以继续做其他事,不会影响页面的加载与用户的操作
$.ajax({
url: '', // 控制页面提交的地址,默认为当前地址
type: '', // 控制请求方式,默认为get请求
data: {}, // 提交的数据
success: function(形参){ //后端返回数据时执行
异步回调函数
}
})
// 形参接收后端返回的数据,一般返回字符或JSON格式数据

Content-Type:用于记录发送数据的编码格式
格式1:urlencoded
数据格式:name=value,多个数据使用&符隔开
django后端统一处理到request.POST中
格式2:formdata
数据格式:没有编码无法查阅
django后端会断自动将文件数据处理到request.FILES,普通数据处理到request.POST
格式3:application/json
数据格式:json格式
django后端不会处理,存放在request.body中自己处理(bytes类型)
发送数据时要先转换为json格式数据
$.ajax({
url: '',
typr: 'post',
data: JSON.stringify(数据),
contentType: 'application/json'
success: function(){}
})
ps:所有数据接收后都会先存放在request.body中
$('#d1').cilck(function(){
// 先创建内置对象
let myFormData = new FormData();
// 把需要发送的数据添加到对象中,第一个参数为K第二个参数为V
myFormData.append('username', $('#d2').val()) // 普通数据
myFormData.append('file', $('#d3')[0].files[0]) // 文件数据
$.ajax({
url: '',
type: 'post',
data: myFormData, // 直接发送对象即可
// 添加以下两行代码
contentType: false, // 不使用任何编码
processData: false, // 不处理数据对象
success: function(){
}
})
})
后端与ajax交互,那么就不应该再返回页面,通常情况下返回的都是jason格式数据
前端针对于HttpResponse与JsonResponse的处理策略不同
return HttpResponse(json.dumps(data)) # 针对于Httpresponse自己序列化为JSON数据格式的,还是当做普通字符,不会自动反序列化
return JsonResponse(data) # 而对于JsonResponse因为指定发送JSON数据格式,那么前端会自动反序列化
而想让HttpResponse也能够自动反序列化,可以在ajax中添加一个参数
dataType: 'JSON'
def ser(request):
user_list = models.User.objects.all() # 获取用户表中所有用户对象
from django.core import serializers # 导入内置序列化模块
ret = serializers.serialize('json', user_list) # 调用方法快速的将对象中的数据序列化,第一个参数为序列化的方式
return HttpResponse(ret)