Ajax基本操作
Ajax简介
| 1.Ajax(Asynchronous Javascript And XML)异步的JavaScript和XML。即使用JavaScript语言与服务器进行异步交互,传输的数据为XML |
| 2.XML是被设计用来传输和存储数据的,可扩展标记语言,是一种标记语言,是从标准通用标记语言中简化修改出来的,他主要用到可扩展标记语言,可扩展样式语言 |
| 3.JSON格式与2001年由Douglas Crockford提出,目的为了取代繁琐笨重的XML格式 |
| 4.优点 |
| Ajax使用JavaScript技术向服务端发送异步请求 |
| Ajax请求无需刷新整个页面 |
| 因为服务器响应内容不再是整个页面而是页面中的部分内容,所以Ajax性能高 |
| 两个关键点:局部刷新、异步请求 |
| 5.我们现在使用的是jQuery封装之后的版本 |
Ajax基本操作
| 1.jQuery实现的AJAX |
| $.ajax({ |
| url:'', 控制数据的提交地址 |
| type:'', 控制请求方式(默认是get请求) |
| data:{}, 组织提交的数据 |
| success:function(形参){ |
| 异步回调函数 |
| } |
| }) |
| 2.JS实现AJAX |
| var b2 = document.getElementById("b2"); |
| b2.onclick = function () { |
| // 原生JS |
| var xmlHttp = new XMLHttpRequest(); |
| xmlHttp.open("POST", "/ajax_test/", true); |
| xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); |
| xmlHttp.send("username=q1mi&password=123456"); |
| xmlHttp.onreadystatechange = function () { |
| if (xmlHttp.readyState === 4 && xmlHttp.status === 200) { |
| alert(xmlHttp.responseText); |
| } |
| }; |
| }; |
数据编码格式
| 1.可以朝后端发送post请求的方式 |
| 1.form表单 |
| 2.Ajax请求 |
| |
| 2.前后端传输数据的编码格式 |
| 1.urlencoded |
| 2.formdata |
| 3.json |
| |
| 3.form表单 |
| 默认的数据编码格式是urlencoded |
| 数据格式:username=haha&password=123 |
| 格式一:urlencoded |
| django 后端针对符合urlencoded编码格式的数据都会帮你解析封装到request.POST中 |
| username=haha&password=123---->request.POST |
| 格式二:formdata |
| 如果把编码格式改成formdata,那么针对普通键值对还是解析到 request.POST中 而将文件解析到request.FILES中 |
| 格式三:json |
| form表单没法发送json格式数据 |
| |
| 4.Ajax请求 |
| Content-Type |
| 格式一: urlencoded |
| 数据格式: name=joseph&age=21&hobby=read |
| django后端同意处理到request.POST中 |
| |
| 格式二:formdata |
| 数据格式:无法查阅 |
| django后端自动将文件数据处理到request.FILES 普通数据 request.POST |
| |
| 格式三:application/json |
| 数据格式:json格式 |
| django后端不会自动处理,在request.body中存储(bytes类型)需要自己编写处理 |
| 语法注意事项 |
| data:JSON.stringify({'name':'joseph','age':21,'hobby'}), |
| contentTYPE:'application/json', |
Ajax携带文件数据
| 1.前端查看数据类型 |
| console.log(typeof 字段名) |
| console.log(打印) |
| console.log(args.name) |
| 2.diamante编写 |
| $('#d3').click(function() { |
| let formData = new FormData(); |
| formData.append('username',$('#d1').val()) |
| formData.append('file', $('#d2')[0].files) |
| dataType:'JSON' |
| $.ajax({ |
| url:'', |
| type:'post', |
| data:formData, |
| contentType:false, |
| processData:false, |
| success:function (args) { |
| alert(args) |
| window.location.href = args |
| console.log(typeof 字段名) |
| console.log(打印) |
| console.log(args.name) |
| } |
| }) |
| }) |
使用Ajax计算小工具
| <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js"></script> |
| |
| |
| <body> |
| <input type="text" id="i1"> + <input type="text" id="i2"> = <input type="text" id="i3"> |
| <button id="d1">计算</button> |
| <script> |
| // 1.查找计算器按钮标签 |
| let $btnEle = $('#d1'); // 根据id查找标签对象 |
| // 2.给按钮标签绑定一个点击事件 |
| $btnEle.on('click', function () { |
| // 3.获取两个输入框内的数据 |
| // 3.1 先查找到输入框之后获取里面的value属性值即可 |
| let i1Val = $('#i1').val(); // val()拿到输入框里面的值 |
| let i2Val = $('#i2').val(); |
| // 4.发送ajax的请求 |
| $.ajax({ |
| uri: '', // 向哪个后端发送请求(路径有3方式:不写,后缀,全路径) |
| type: 'post', // 规定发送什么请求方式(get post) |
| data: {'i1': i1Val,'i2':i2Val}, // 请求携带的数据 |
| success:function (args) { // 异步回调机制(后端返回数据之后,自动触发的操作) |
| // 形参args就是后端返回过来的数据 |
| $('#i3').val(args) |
| } |
| }) |
| }) |
| </script> |
| </body> |
| |
| |
| from django.shortcuts import render,HttpResponse |
| import json |
| def ajax(request): |
| if request.method == 'POST': |
| print(request.POST) |
| i1 = request.POST.get('i1') |
| i2 = request.POST.get('i2') |
| res = int(i1) + int(i2) |
| return HttpResponse(res) |
| return render(request,'ajax.html') |
sweetalter介绍
回调函数参数问题
| 1. |
| 后端跟Ajax交互不应该再返回页面,通常情况下都是返回json格式数据 |
| 前端针对HttpResponse和JsonRepose返回的Json格式数据处理策略不同 |
| HttpResponse返回的是一个字符串 |
| JsonRepose返回的则是一个JSON格式数据 |
| HttpResponse不会自动反序列化,而JsonRepose会自动反序列化,如果想让HttpResponse也自动反序列化那么需要添加一个固定参数 |
| dataType:'JSON' |
Django自带的序列化组件
| 1.序列化 |
| python中序列化与反序列化 |
| import json |
| json.dumps() |
| json.loads() |
| Js中反序列化 |
| JSON.stringify() |
| JSON.parse() |
| |
| 2.序列化 |
| def ser(request): |
| |
| user_list=models.User.objects.all() |
| |
| from django.core import serializers |
| |
| ret=serializers.serialize('json',user_list) |
| return HttpResponse(res) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人