Django与Ajax
Ajax
异步提交,局部刷新
ajax不是一门新的技术并且有很多版本,我们目前学习的是jquery版
一、Ajax简介
1.什么是ajax
Ajax即Asynchronous Javascript And XML 也就是异步 JavaScript和 XML
- 异步:和同步对应
- JavaScript:通过JavaScript来操作,发送请求到服务端
- XML:数据交互使用XML,现在主流使用JSON格式
- 局部刷新:JS的DOM操作
即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML,现在更多使用json数据)
2.同步与异步
- 同步交互:客户端发出一个请求后,需要等待服务器响应接受后,才能发出第二个请求
- 异步交互:客户端发出一个请求后,不需要等待服务器响应结束,就可以发出第二个请求
3.XML格式与JSON格式
XML格式:
<name>duoduo</name> <age>18</age>
JSON格式:
{ "name":"duoduo", "age":"18", }
对比:
格式 | 可阅读性 | 解析难度 | 空间占用 |
---|---|---|---|
XML | 高 | 复杂 | 大 |
JSON | 高 | 简单 | 小 |
二、基本语法
$.ajax({ url:'', type:'post', // 请求方式 默认也是get data:{'v1':v1Val, 'v2':v2Val}, success:function (args) { 后端响应的数据 // 成功后 触发,后端返回结果之后自动触发 args接收后端返回的数据 }, error:function () { // 失败后 触发 } })
-
url
控制数据提交的地址有三种填写方式,与form标签的action一致
1)不填写--超当前地址提交
2)填写一个完整的网址--超完整网址提交
3)路由--超该路由提交
-
type
控制数据提交的方式请求方式 默认也是get
-
data
提交的数据发送的数据,以字典的形式发送
-
success
异步回调函数args
接收后端返回的数据使用ajax交互,后端返回的数据会被args接受,不再影响整个浏览器页面
如何发送ajax:
- 通过绑定点击事件
- input框监听事件
三、Content-Type参数
编码格式,类似于数据报头
1.urlencoded
ajax默认的编码格式、form表单默认的格式
数据格式 :xxx=yyy&uuu=ooo&...
django后端会自动将urlencoded数据处理到request.POST/request.GET
2.form data
包括文件数据
django后端针对普通的键值对还是处理到request.POST中,但是针对文件会处理到request.FILES
3.Application/Json
ajax支持发送的数据
- 普通数据urlencoded
- form data
- Application/json
request.body 前端发送的数据都先放在body中,如果是普通数据发送给POST,如果是文件会将普通数据放到POST中,文件数据交给FILES中
而json格式的数据则不处理放在body中,后端自己处理json格式数据
-
发送Json格式数据
1.确保data对应的数据是json格式字符串
data:JSON.stringify({})
如果发送的是普通的字典,那么收到的数据会以xxx=yyy&aaa=bbb的形式展现,所以当以Json格式发送,浏览器则会有更好的渲染效果
2.修改数据编码格式(默认是)
<script> $('#d1').click(function (){ $.ajax({ url:'', type:'post', data:JSON.stringify({'name':'jason','age':18}), contentType:'application/json', success:function (){ alert('多喝热水哦') } }) }) </script>
四、Ajax携带文件数据
-
1.
data
换成文件对象 -
2.添加两个键值对
contentType:false
processData:false
<script> $('#d3').click(function () { // 1.先产生一个FormData对象 let myFormDataObj = new FormData(); // 2.往该对象中添加普通数据 myFormDataObj.append('name', 'jason'); myFormDataObj.append('age', 18); // 3.往该对象中添加文件数据 myFormDataObj.append('file', $('#d2')[0].files[0]) // 4.发送ajax请求 $.ajax({ url:'', type:'post', data:myFormDataObj, // ajax发送文件固定的两个配置 contentType:false, processData:false, success:function (args){ alert(args) } }) }) </script>
五、Ajax补充说明
主要是针对回调函数args接收到的数据
1.后端:request.is_ajax()
判断是否是ajax请求
2.后端返回的三大方法都会被ajax接收,不再影响整个浏览器页面
选择和ajax交互,那么返回给后端的数据都会被ajax回调函数中的args形参接受
3.选择使用ajax数据
(1)JSON模块进行序列化
- 后端序列化
def ab_ajax_func(request): if request.method == "POST": user_dict = {"username": "duoduo", 'hobby': '你好吗'} import json json_data = json.dumps(user_dict) return HttpResponse(json_data) return render(request, 'ajaxtest.html')

通过自定义响应码,可以通过响应码的不同,在前端的ajax回调函数中做出不同的结果
- 前端反序列化
$('#d1').click(function(){ $.ajax({ url:'', type:'post', data:{'name':'duoduo'}, success:function (args){ console.log(args); console.log(typeof args); console.log(args.username); let userObj = JSON.parse(args) console.log(userObj); console.log(typeof userObj); console.log(userObj.username); } }) })
(2)JsonResponse
- 后端:通过
JsonResponse
def ab_ajax_func(request): if request.method == "POST": user_dict = {"username": "duoduo", 'hobby': '你好吗'} return JsonResponse(user_dict) return render(request, 'ajaxtest.html')
- 前端:加一个配置
dataType:'json'
$('#d1').click(function(){ $.ajax({ url:'', type:'post', data:{'name':'duoduo'}, dataType:'json', success:function (args){ console.log(args); console.log(typeof args); console.log(args.username); console.log(args.hobby); } }) })
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY