Django框架(十二)-- Djang与Ajax

一、什么是Ajax

AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML,现在更多使用json数据)。

  • 同步交互:客户端发出一个请求后,需要等待服务器响应结束后,才能发出第二个请求;
  • 异步交互:客户端发出一个请求后,无需等待服务器响应结束,就可以发出第二个请求。

二、Ajax的特点

1、异步

客户端发出一个请求后,无需等待服务器响应结束,就可以发出第二个请求

2、局部刷新

例如:

邮箱没写,会局部刷新邮箱区域,判断邮箱

三、Ajax优点

  • AJAX使用 Javascript 技术向服务器发送异步请求
  • AJAX无须刷新整个页面

四、 基于jquery的Ajax使用

1、基本语法

// 在templates模板层使用
$.ajax({url:'/index/',type:'post',//data:往后台提交的数据data:{'name':'lqz','age':18},//成功的时候回调这个函数success:function (data) {alert(data)}
})

2、完整使用语法

<!-- 先导入jQuery -->
<script src="/static/jquery-3.3.1.js"> </script>
<button class="send_Ajax">send_Ajax</button>
<script>$(".send_Ajax").click(function(){$.ajax({url:"/handle_Ajax/",type:"POST",data:{username:"Yuan",password:123},success:function(data){console.log(data)},error: function (jqXHR, textStatus, err) {console.log(arguments);},complete: function (jqXHR, textStatus) {console.log(textStatus);},statusCode: {'403': function (jqXHR, textStatus, err) {console.log(arguments);},'400': function (jqXHR, textStatus, err) {console.log(arguments);}}})})</script>

3、利用ajax提交表单中的数据

<p><input type="text" name="add1" id="add1">+<input type="text" name="add2" id="add2">=<input type="text" name="sum" id="sum"></p>
<button class="btn">点我</button><script>$('.btn').click(function(){$.ajax({url:'add',type:'post',// 通过 .val() 获取值data:{'add1':$('#add1').val(),'add2':$('#add2').val},success:function(data){// 将数据写在val(data)中,可以赋值$('#sum').val(data)location.href='/index/'}})})
</script>

五、Ajax的执行流程

六、基于ajax进行文件上传

1、请求头ContentType

(1)application/x-www-form-urlencoded方式

这是最常见的 POST 提交数据的方式了。浏览器的原生 <form> 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。

(2)multipart/form-data方式

这又是一个常见的 POST 数据提交的方式。我们使用表单上传文件时,必须让 <form> 表单的 enctype 等于 multipart/form-data

上面提到的这两种 POST 数据的方式,都是浏览器原生支持的,而且现阶段标准中原生 <form> 表单也只支持这两种方式(通过 <form> 元素的 enctype 属性指定,
默认为 application/x-www-form-urlencoded。其实 enctype 还支持 text/plain,不过用得非常少)。

 

(3)application/json方式

现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON 字符串。由于 JSON 规范的流行,除了低版本 IE 之外的各大浏览器都原生支持 JSON.stringify,服务端语言也都有处理 JSON 的函数,使用 JSON 不会遇上什么麻烦。

2、基于Form表单上传文件

(1)模板层

<!-- 必须指定 enctype="multipart/form-data" -->
<form action="/files/" method="post" enctype="multipart/form-data"><p>用户名:<input type="text" name="name" id="name"></p><!-- 必须指定type="file" --><p><input type="file" name="myfile" id="myfile"></p><input type="submit" value="提交">
</form>
<button id="btn">ajax提交文件</button><script>$("#btn").click(function () {// 上传文件,必须用FormDatavar formdata=new FormData();formdata.append('name',$("#name").val());// 取出文件$("#myfile")[0].files拿到的是文件列表,取第0个把具体的文件取出来formdata.append('myfile',$("#myfile")[0].files[0]);$.ajax({url:'/files_ajax/',type:'post',// 告诉jQuery不要去处理发送的数据,(name=lqz&age=18)processData:false,// 指定往后台传数据的编码格式(urlencoded,formdata,json)// 现在用formdata对象处理了,就不需要指定编码格式了,不要编码了contentType:false,data:formdata,success:function (data) {alert(data)}})})
</script>

(2)视图层

def add_file(request):if request.method=='GET':return render(request,'add_files.html')# 这是个字典dic_files=request.FILESmyfile=dic_files.get('myfile')with open(myfile.name,'wb') as f:# 循环上传过来的文件for line in myfile:# 往空文件中写
            f.write(line)return HttpResponse('ok')def files_ajax(request):# 提交文件从,request.FILES中取,提交的数据,从request.POST中取name=request.POST.get('name')print(name)dic_files = request.FILESmyfile = dic_files.get('myfile')with open(myfile.name, 'wb') as f:# 循环上传过来的文件for line in myfile:# 往空文件中写
            f.write(line)return HttpResponse('ok')

(3)路由层

url(r'^files/$', views.add_file),
url(r'^files_ajax/', views.files_ajax),

注意点:

1、基于form表单上传文件,需要指定编码格式,那么ajax一样也是,首先我们先创建一个FormData的一个对象
2、我们通过append方法,给对象传值append(value1,value2),相当于value1=value2
3、processData:false,  # 告诉jQuery不要去处理发送的数据contentType:false,  # 告诉jQuery不要去设置Content-Type请求头
4、processData的值只能是布尔值,因为这时的data的值,是一个对象,所以不需要进行处理了

六、基于ajax提交json格式数据

1、模板层

<form  ><p>用户名:<input type="text" name="name" id="name"></p><p>密码:<input type="password" name="pwd" id="pwd"></p><input type="submit" value="提交">
</form><button id="btn">ajax提交json格式</button>
</body><script>$('#btn').click(function () {var post_data={'name':$("#name").val(),'pwd':$("#pwd").val()};console.log(typeof post_data);//JSON.stringify相当于python中json.dumpus(post_data),把数据装换位json格式字符串//pos是个json格式字符串var pos=JSON.stringify(post_data);console.log(typeof pos);$.ajax({url:'/json/',        // url这里为空的话,默认向该页面发出ajax请求 type:'post',       // type值为空的话,默认为get方法data:pos,contentType:'application/json',dataType:'json',success:function (data) {//如果data是json格式字符串,如何转成对象(字典)?//data=JSON.parse(data)console.log(typeof data)console.log(data.status)/*console.log(data)var ret=JSON.parse(data)console.log(typeof ret)console.log(ret.status)*///alert(data)}})})
</script>

2、视图层

def add_json(request):if request.method=='GET':return render(request,'json.html')print(request.POST)print(request.GET)print(request.body)import json# res是个字典res=json.loads(request.body.decode('utf-8'))print(res)print(type(res))dic={'status':'100','msg':'登录成功'}# return HttpResponse('ok')# 返回给前台json格式# return HttpResponse(json.dumps(dic))return JsonResponse(dic)

3、路由层

url(r'^json/', views.add_json),

总结:

1、如果是文件,就先创建一个FormData对象,以key,value的位置,参传数进去在ajax方法里,data对应的值就是这个FormData对象,所以在processData的值应该为false,contentType的值也为false(让jquery不设置请求头)注意:它文件在后面中request.FILES里面,如果有其他input框所对应的value,它的值在POST中取
2、如果不是上传文件,就是form表单的里input的话,就直接传了,contentType默认为urlencoded编码方法
3、json格式数据,首先是把对象给造出来,并且把数据放里面,然后转换成json格式字符串,这里contentType必须为'application/json'
这样它的的数据在request.body里,是二进制格式
4、在前端接收到后台json格式数据,可以在ajax那里写dataType:'json',它会自动转换成对象

 

转载于:https://www.cnblogs.com/zhangbingsheng/p/10663808.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/412950.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javascript 将table导出 Excel ,可跨行跨列

原文地址&#xff1a;https://www.cnblogs.com/hailexuexi/p/10795887.html <script language"JavaScript" type"text/javascript">//jQuery HTML导出Excel文件(兼容IE及所有浏览器)function HtmlExportToExcel(tableid,file_name) {var filename fi…

wampserver 搭建 php环境 运行方法

大家好&#xff0c;我是烤鸭&#xff1a;今天分享的是如何用wamp 运行 php代码。1. wampserver下载&#xff1a;下载地址&#xff1a;https://sourceforge.net/projects/wampserver/files/WampServer%203/WampServer%203.0.0/Addons/Php/wampserver3_x64_addon_php7.2.7.exe…

java php des加密 byte数组16进制 DESTools

大家好&#xff0c;我是烤鸭:今天分享的是java 和 php des 加密。因为接口对接&#xff0c;难免不同语言&#xff0c;加密又是必不可少的。作为接口的提供方&#xff0c;必须把加密规则写好&#xff0c;最好有不同语言的加密demo。1. java版本的des加密解密工具类DESTools.j…

高可用Eureka注册中心配置说明(双机部署)

目 录 1. 高可用EureKa注册中心示意图 2. Eureka实例相互注册配置 3. 微服务注册到Eureka配置 4. 启动步骤及配置成功检查 5. 说明事项 1. 高可用EureKa注册中心示意图 Spring Cloud的Eureka Server的高可用实际上就是将自己作为服务向其他服注册中心注册自己&#xff0c;形成…

java 实现 常见排序算法(一) 冒泡排序

大家好&#xff0c;我是烤鸭&#xff1a; 今天分享一下基础排序算法之冒泡排序。 1. 冒泡排序&#xff1a; 原理&#xff1a;比较两个相邻的元素&#xff0c;将较大的元素交换至右端。 思路&#xff1a;依次比较相邻的两个数&#xff0c;将小数放在前面&#xff0c;大…

vue学习之npm

任何一门计算机语言都包含了丰富的第三方库&#xff0c;npm就是JavaScript这门语言的第三方库管理工具&#xff0c;本文详细介绍了JavaScript的包管理工具&#xff0c;npm。 在计算机中安装好Node.js之后&#xff0c;默认已经安装好了npm包管理工具&#xff0c;我们可以输入npm…

Java 深copy 浅copy 引用copy

大家好&#xff0c;我是烤鸭&#xff1a; 今天分享一下浅copy和深copy。 1. 深copy 什么是深copy&#xff0c;只复制原对象属性值&#xff0c;不管地址。 说一下业务场景&#xff1a; 如果我想创建一个对象&#xff0c;只是对原对象的某个属性值改变。普通的做法就是new 一个…

linux定时任务清理cache缓存

大家好&#xff0c;我是烤鸭&#xff1a; 如果你出现类似cache过多的情况&#xff0c;请参考这篇。 buff/cache 占了1.6G&#xff0c;多数情况下是无所谓的。但是有时候在系统内存不足的时候&#xff0c;可能会影响其他程序的执行。 之前就遇到过 jenkins 因为内存不足 集成失败…

SecureCRT Application 已停止工作

解决方法一&#xff1a; cmd ----> regedit —>HKEY_LOCAL_MACHINE\SOFTWARE\vandyke 删掉vandyke 解决方法二&#xff1a; SecureCRT使用过程中出现异常后自动关闭&#xff0c;导致下次无法正常启动&#xff08;运行程序无反应&#xff09;&#xff0c;此时一种可能的原…

SQLServer之事务简介

事务定义 事务是单个的工作单元。事务是在数据库上按照一定的逻辑顺序执行的任务序列&#xff0c;既可以由用户手动执行&#xff0c;也可以由某种数据库程序自动执行。 事务分类 自动提交事务 每条单独的语句都是一个事务。 在自动提交模式下&#xff0c; 每个数据库操作是在执…

Vmware centos无法连接网络

在vmware下安装了centos7&#xff0c;桥接模式&#xff0c;无法连接网络 解决方案一&#xff1a; 然后重启虚拟机 解决方案二&#xff1a; 然后再试试重启能否联网 解决方案三&#xff1a;

mybatis 一对一 一对多 级联查询

大家好&#xff0c;我是烤鸭&#xff1a; 今天分享一下关于mybatis的级联查询。 环境&#xff1a; mybatis 3.2.8 spring 4.1.9 1. 业务场景 在一个人申请某些账号或者权限的时候&#xff0c;比如微信的认证流程。 会让你一步一步按要求输入&#xff0c;比如第一步&am…

IDEA启动tomcat报错java.util.zip.ZipException: error in opening zip file

原因CATALINA_BASE参数后面多了一个斜杠 将&#xff1a;CATALINA_BASEK:\Tomcats\apache-tomcat-9.0.10_cform\ 改&#xff1a;CATALINA_BASEK:\Tomcats\apache-tomcat-9.0.10_cform

java 实现 常见排序算法(二) 插入排序

大家好&#xff0c;我是烤鸭&#xff1a; 今天分享一下基础排序算法之直接插入排序。 1. 直接插入排序&#xff1a; 原理&#xff1a;假设前面的数为有序数列&#xff0c;然后有序数列与无序数列的每个数比较&#xff0c;我们可以从右向左比较 思路&#xff1a;从第2…

linux 常用 启动命令 汇总

大家好&#xff0c;我是烤鸭&#xff1a; 没有准备启动脚本。服务器出问题之后&#xff0c;重启就是全部重启。 如&#xff1a; mysql,nginx,tomcat,zookeeper,rabbitmq,mongodb,redis,xxxxx 头大。持续更新。。。 consul启动&#xff1a; (公网可以访问 使用-client 0.0.0…

java 爬虫 抓取 网易云音乐

大家好&#xff0c;我是烤鸭&#xff1a; 今天和大家交流一下爬虫&#xff0c;抓取网易云音乐。只讨论技术&#xff0c;不提倡其他的。 1. 找音乐源地址 谷歌浏览器 F12 &#xff0c;找请求类型是 Media的。 2. 找请求链接 切换请求类型到 All&#xff0c;看 Respons…

idea警告Cannot resolve MVC View

关闭MVC View路径检查,Settings --> Editor -->Inspections -->搜索Spring MVC View—>取消勾选Spring MVC View Reference

ssh sftp 免密码 公钥登录

大家好&#xff0c;我是烤鸭&#xff1a; 今天分享的是java ssh sftp 免密码登录。 1. JAVA代码 ssh连接 http://www.360doc.com/content/14/0409/16/9552892_367544139.shtml https://blog.csdn.net/u013066244/article/details/70198839 公钥和私钥不需要用代码生成&…

CF989E A Trance of Nightfall(概率+矩阵快速幂优化+倍增)

CF传送门 洛谷传送门 【题目分析】 在zxy大佬的讲解下终于懂了这道题的做法了qwq。。。 首先根据题意&#xff0c;出发点不一定在特殊点上&#xff0c;但第一次操作后&#xff0c;之后所有的操作都是在特殊点上&#xff0c;所以先考虑从线上出发的最大概率&#xff0c;再加一步…

SqlServer自定义聚合函数

sqlserver2017版本包括以上的可以使用string_agg(字段,’,’)函数 sqlserver查询版本&#xff1a; select versionSql Server自定义聚合函数详细bai步骤 开始-> 输出-> 首先用baiVS2008/VS2005建立一个SQL Server项目&#xff0c;右键解决方案添加新项 点击“确定…