Ajax
什么是Ajax?
AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML,现在更多使用json数据)。
- 同步交互: 客户端发出一个请求后,需要等待服务器响应结束后,才能发出第二个请求。
- 异步交互: 客户端发出一个请求后,无需等待服务器响应结束,就可以发出第二个请求。
那么Ajax具有什么优点?
- 异步交互: 客户端发出一个请求后,无需等待服务器响应结束,就可以发出第二个请求。
- 浏览器局部刷新: 在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页内容。
这也是Ajax最大的特点,在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页内容,这一特点给用户的感受是在不知不觉中完成请求和响应过程。
举例浏览器局部刷新,以GitHub注册页面举例:
输入邮箱地址,GitHub注册界面动态获取用户实时书写信息,整个页面并没有刷新,实时的跟后端确认并实时展示到前端,这就是局部刷新。

以往我们在前后端交互是发送请求的方式有哪些?
- 浏览器地址栏输入url回车 ---GET请求
- a标签href属性 ---GET请求
- form表单 ---GET请求/POST请求
- Ajax ---GET请求/POST请求
其中from表单提交数据方式页面统一提交即同步交互,而Ajax使用JavaScript技术向服务器发送异步请求,不再需要刷新整个页面,只刷新页面中的部分内容,所有Ajax性能更高。
目前使用Ajax居多为jQuery封装之后的版本,所以在前端页面使用Ajax时需要确保导入了jQuery.
Ajax基本语法:
| <script> |
| |
| $('#btn').click(function (){ |
| |
| $.ajax({ |
| |
| url:'', |
| |
| type:'post', |
| |
| data:{'username':'junjie','password':123}, |
| |
| success:function (args) { |
| |
| } |
| }) |
| }) |
| </script> |
先举一个基本例子来演示Ajax:
| 页面上有三个input框: |
| 在前面两个框中输入数字,点击按钮,向后'g端发送ajax请求。 |
| 后端计算出结果,再返回给前端动态展示到第三个input框中(整个过程页面不可以有刷新,也不能在前端计算) |
| |
前端页面:
| <body> |
| <input type="text" id="d1">+ |
| <input type="text" id="d2">= |
| <input type="text" id="d3"> |
| <p> |
| <button id="btn">点</button> |
| </p> |
| </body> |
| <script> |
| |
| $('#btn').click(function (){ |
| |
| $.ajax({ |
| |
| url:'', |
| |
| type:'post', |
| |
| data:{'username':'junjie','password':123}, |
| |
| success:function (args) { |
| |
| } |
| }) |
| }) |
| </script> |
views.py: 后端
| def ab_ajax(request): |
| if request.method == 'POST': |
| """ |
| 用ajax向后端提交post请求时,也是在request.POST中能够拿到普通键值对 |
| 输出: <QueryDict: {'username': ['junjie'], 'password': ['123']}> |
| """ |
| print(request.POST) |
| |
| return render(request, 'index.html') |

| def ab_ajax(request): |
| if request.method == 'POST': |
| """ |
| 用ajax向后端提交post请求时,也是在request.POST中能够拿到普通键值对 |
| <QueryDict: {'username': ['junjie'], 'password': ['123']}> |
| """ |
| print(request.POST) |
| i1 = request.POST.get('i1') |
| i2 = request.POST.get('i2') |
| |
| i3 = int(i1) + int(i2) |
| return HttpResponse(i3) |
| return render(request, 'index.html') |

| script> |
| |
| $('#btn').click(function () { |
| |
| $.ajax({ |
| |
| url: '', |
| |
| type: 'post', |
| |
| |
| data: {'i1': $('#d1').val(), 'i2': $('#d2').val()}, |
| |
| success: function (args) { |
| {#alert(args)#} |
| console.log(typeof (args)) |
| $('#d3').val(args) |
| } |
| }) |
| }) |
| </script> |
后端views.py
| def ab_ajax(request): |
| if request.method == 'POST': |
| """ |
| 用ajax向后端提交post请求时,也是在request.POST中能够拿到普通键值对 |
| <QueryDict: {'username': ['junjie'], 'password': ['123']}> |
| """ |
| d = {'username':'junjie','age':666} |
| return JsonResponse(d) |
| return render(request, 'index.html') |

针对后端如果使用HttpResponse返回的数据,回调函数不会自动反序列化
如果后端使用的是JsonResponse返回的数据,回调函数会自动反序列化
补充:
| # 参数 代码发布项目还会涉及 |
| dataType:'JSON' |
| |
| 当后端是以HttpResponse返回的json格式的数据 |
| 默认是不会自动反序列化的 |
| 1.自己手动JSON.parse() |
| 2.配置dataType参数 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了