AJAX
Ajax
-
AJAX(asynchronous Javascript And XML)
异步的JavaScript和XML
-
优点:
- AJAX使用JavaScript技术向服务器发送异步请求
- 在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容
- 因为服务器响应的内容不再是整个页面,而是页面中的部分内容,所以AJAx性能高
- 两个关键点:局部刷新,异步请求
案例
在前端页面上有三个输入框,实现前两个框内输入数字,朝后端发请求,在页面不刷新的情况下实现第三个框内为前两个数字的和
two_sum.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
{% load static %}
<script src="{% static 'bootstrap/js/jquery.js' %}"></script>
</head>
<body>
<input type="text" id="t1"> + <input type="text" id="t2"> = <input type="text" id="t3">
<button id="s1">提交</button>
<script>
$('#s1').on('click', function(){
$.ajax({
url: '',
type: 'post',
data: {'t1': $('#t1').val(), 't2': $('#t2').val()},
success: function (data) {
$('#t3').val(data)
}
})
})
</script>
</body>
</html>
views.py
def two_sum(request):
if request.method == 'POST':
t1 = request.POST.get('t1')
t2 = request.POST.get('t2')
tsum = int(t1) + int(t2)
return HttpResponse(tsum)
return render(request, 'two_sum.html', locals())
AJAX传json格式数据
djang不会将前端传过来的json格式的数据解析,而是直接放到request.body中
json_bytes = request.body
json_str = json_bytes.decode('utf8')
json_dict = json.loads(json_str)
注意:
-
指定contentType参数
contentType:'application/json'
-
要发送的数据,确保是json格式
data: JSON.stringify({'username': 'qqqq', 'password': '123456'})
AJAX传文件
前端:需要利用内置对象Formdata,该对象既可以传普通的键值,也可以传文件
如何获取input获取用户上传文件的文件内容
- 先通过jquery找到该标签
- 将jquery对象转换成原生的js对象
- 利用原生js对象的方法,直接获取文件内容
<script>
$('#b1').on('click', function () {
// 生成formdata对象
var myFormData = new ForData();
// 向对象中添加普通键值
myFormData.append('username', $('#t1').val());
myFormData.append('password', $('#t2').val());
// 向对象中添加文件数据
myFormData.append('myfile', $('#t3')[0].files[0]);
$.ajax({
url: '',
type: 'post',
data: myFormData;
cententType:false, // 不用编码,默认使用formdata自带编码,django能够识别该对象
processData:false, // 浏览器对数据不做处理,直接发送
success: function (data) {
alert(data)
}
})
})
</script>
注意:
- 利用formdata对象,能够简单快速的传输数据,包括普通键值和文件
- ajax中参数设置:
- data: formdata对象
- contentType: false
- processData: false
contentType前后端传输数据编码格式
-
urlencode数据格式
-
form表单默认的提交数据的编码格式是urlencode数据格式
-
数据格式:username=admin&password=123
-
django后端会将urlencode数据格式解析后打包给request.POST,用户从request.POST中获取数据
-
ajax默认的提交数据的格式也是urlencode
-
-
formdata数据格式
- django后端会将formdata格式的数据解析后打包给request.FILES,而不是request.POST
-
前后端交互数据格式的统一
- 前后端在做数据交互的时候,一定要表明所发的数据是什么格式
序列化组件
- 将用户表的数据查询出来,返回给前端
- 返回给前端的是一个字典,字典中是数据的字段
from django.core import serializers
def ser(request):
user_queryset = models.Userinfo.objects.all()
res = serializers.serialize('jason', user_queryset) # 序列化user_queryset, 格式为json
return render(request, 'ser.html', locals())