- 浏览: 86282 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
songfantasy:
不错,学习了
java与c/c++之间的数据交互-----jni点滴 -
wen0301:
有时间,读读看,并且看看花多长时间。
为了练好口语,你敢不敢每天读一遍,坚持一个月? -
wen0301:
加一些 代码,效果会更好。。。
设计模式:简单工厂、工厂方法、抽象工厂之小结与区别 -
wen0301:
能加一些实际代码 效果会更好吧~~
设计模式:简单工厂、工厂方法、抽象工厂之小结与区别 -
lijiancool:
每天一遍,都不要做其他事情了,哦滴神呀。。。。
为了练好口语,你敢不敢每天读一遍,坚持一个月?
接上篇随笔。继续介绍ajax的使用。
上篇友情连接:http://www.cnblogs.com/liluning/p/7831169.html
本篇导航:
Ajax响应参数
csrf 跨站请求伪造
jQuery.serialize()
上传文件
一、Ajax响应参数
上篇最后介绍了ajax的请求参数现在补充一个响应参数
dataType:
预期服务器返回的数据类型,服务器端返回的数据会根据这个值解析后,传递给回调函数。 默认不需要显性指定这个属性,
ajax会根据服务器返回的content Type来进行转换; 比如我们的服务器响应的content Type为json格式,这时ajax
方法就会对响应的内容进行一个json格式的转换,if转换成功,我们在success的回调函数里就会得到一个json格式的对
象;转换失败就会触发error这个回调函数。如果我们明确地指定目标类型,就可以使用 data Type。dataType的可用
值:html|xml|json|text|script
简单说就是告诉服务器需要返回什么数据类型
二、csrf 跨站请求伪造
我们之前用form表单POST提交时如果没有{% csrf_token %}客户端收不到数据会报错同样用ajax POST提交数据也有同样的错误那么准么解决呢?
1、方法一
$.ajaxSetup({
data: {csrfmiddlewaretoken: '{{ csrf_token }}' },
});
$.ajax({
...
})
缺点:当js与html文件分离时,{{ csrf_token }} 无法被渲染失去作用,用方法一必须将js和html写在一起
2、方法二
{% csrf_token %}
$.ajax({
url:"",
type:"POST",
data:{
csrfmiddlewaretoken:$("[name='csrfmiddlewaretoken']").val(),
}
})
缺点:html body标签中必须存在{% csrf_token %}
3、方法三
//<script src="{% static 'js/jquery.cookie.js' %}"></script> 需要下载对应文件
<script src="https://cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.js"></script>
$.ajax({
headers:{"X-CSRFToken":$.cookie('csrftoken')},
})
缺点:基本通用哈哈哈
三、jQuery.serialize()
serialize()函数用于序列化一组表单元素,将表单内容编码为用于提交的字符串。serialize()函数常用于将表单内容序列化,以便用于AJAX提交。该函数主要根据用于提交的有效表单控件的name和value,将它们拼接为一个可直接用于表单提交的文本字符串,该字符串已经过标准的URL编码处理(字符集编码为UTF-8)。该函数不会序列化不需要提交的表单控件,这和常规的表单提交行为是一致的。例如:不在<form>标签内的表单控件不会被提交、没有name属性的表单控件不会被提交、带有disabled属性的表单控件不会被提交、没有被选中的表单控件不会被提交。
简单总结:就是说我们如果有很多input标签内容需要提交总不会全部写在data中罗列出来吧,这就用到serialize()函数了可以帮我们一次性提交数据到客户端。
例如:
<form name="myForm" action="http://www.365mini.com" method="post">
<input name="uid" type="hidden" value="1" />
<input name="username" type="text" value="张三" />
<input name="password" type="text" value="123456" />
<select name="grade" id="grade">
<option value="1">一年级</option>
<option value="2">二年级</option>
<option value="3" selected="selected">三年级</option>
<option value="4">四年级</option>
<option value="5">五年级</option>
<option value="6">六年级</option>
</select>
<input name="sex" type="radio" checked="checked" value="1" />男
<input name="sex" type="radio" value="0" />女
<input name="hobby" type="checkbox" checked="checked" value="1" />游泳
<input name="hobby" type="checkbox" checked="checked" value="2" />跑步
<input name="hobby" type="checkbox" value="3" />羽毛球
<input name="btn" id="btn" type="button" value="点击" />
</form>
提交数据
对<form>元素进行序列化可以直接序列化其内部的所有表单元素。
序列化所有:$("form").serialize()
uid=1&username=%E5%BC%A0%E4%B8%89&password=123456&grade=3&sex=1&hobby=1&hobby=2
部分序列化:$(":text, select, :checkbox").serialize()
username=%E5%BC%A0%E4%B8%89&password=123456&grade=3&hobby=1&hobby=2
view视图函数如何取值呢?和以前的POST请求相同
request.POST.get("name") //input中的name属性
四、上传文件
1、普通上传文件
1)template
<form action="/upload/" method="post" enctype="multipart/form-data">
{% csrf_token %}
<p>用户名<input type="text" name="user"></p>
<p>头像<input type="file" name="avatar"></p>
<input type="submit">
</form>
enctype属性不可缺少
2)view
def upload(request):
if request.method=="POST":
print("POST", request.POST)
print("FILES",request.FILES) # FILES <MultiValueDict: {}>
file_obj=request.FILES.get("avatar")
print(file_obj.name,"-----")
with open(file_obj.name,"wb") as f:
for i in file_obj:
f.write(i)
return HttpResponse("成功")
return render(request,"upload.html")
这是将上传的文件写入到本地file_obj的name方法可以取到文件名称
3、Ajax(FormData)
XMLHttpRequest Level 2添加了一个新的接口FormData.利用FormData对象,我们可以通过JavaScript用一些键值对来模拟一系列表单控件,我们还可以使用XMLHttpRequest的send()方法来异步的提交这个"表单".比起普通的ajax,使用FormData的最大优点就是我们可以异步上传一个二进制文件.
1)template
<body>
<form action="" id="s1">
<p>姓名<input type="text"></p>
<p>密码<input type="password"></p>
<p>头像<input type="file" id="upload_avatar"></p>
</form>
<p><button class="Ajax_send">提交</button><span class="login_error"></span></p>
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js "></script>
<script src="https://cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.js"></script>
<script>
function foo() {
$(".login_error").html("")
}
$(".Ajax_send").click(function () {
var formData=new FormData();
formData.append("username",$(":text").val());
formData.append("password",$(":password").val());
formData.append("avatar",$("#upload_avatar")[0].files[0]);
$.ajax({
url:"/get_ajax/",
type:"POST",
headers:{"X-CSRFToken":$.cookie('csrftoken')},
data:formData,
contentType:false,
processData:false,
success:function (data) {
var data=JSON.parse(data);
if(!data["flag"]){
$(".login_error").html("用户名或者密码错误")
setTimeout(foo,3000)
}
}
})
})
</script>
</body>
View Code
2)view
def get_ajax(request):
username=request.POST.get("username")
password=request.POST.get("password")
print("FIFLE",request.FILES)
print("POST",request.POST)
response={"flag":False}
if username=="bjd" and password=="123":
response["flag"]=True
import json
return HttpResponse(json.dumps(response))
发表评论
-
Oracle的where条件in/not in中包含NULL时的处理
2018-01-15 13:15 1579创建一个测试表t_inlinuxidc@TEST> ... -
在sae中设置django,让sae的工作环境跟本地python环境一致
2018-01-15 13:15 425sae中安装有python环境,想让sae导入自己下载的d ... -
win10下Django工程的创建
2018-01-11 13:39 370一、配置环境 win ... -
MySQL 5.7.18 zip文件安装教程
2018-01-11 13:47 516MySQL 5.7.18 zip 文件安装教程 安装 ... -
win10下Django工程的创建
2018-01-11 13:34 588一、配置环境 win10、python3.6、p ... -
MySql数据库逻辑架构讲解
2018-01-11 13:44 627与其他数据库相比,My ... -
Python使用虚拟环境
2018-01-11 13:44 439这里想象一下需 ... -
Kivy 中文教程 实例入门 简易画板 (Simple Paint App):1. 自定义窗口部件 (widget)
2018-01-05 10:01 8871. 框架代码 用 PyCharm 新建一个名为 S ... -
Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 2. 变量
2018-01-05 10:01 1137大家在中学就已经学过变量的概念了。例如:我们令 x = 1 ... -
面向对象1
2018-01-05 09:49 456面向对象概念 面向对象是利用类和对象来创建各种模型对 ... -
Python列表及元组操作
2018-01-05 09:49 562#列表(一组有序 ... -
Python的hasattr() getattr() setattr() 函数使用方法详解
2018-01-05 09:57 719hasattr(object, name)判断一个对象里面 ... -
利用DBUTILS获得刚插入自增id记录的id信息的方法及代码
2018-01-02 12:36 2065我在做两个需要关联的表的时候,第二张表需要知道第一张表的i ... -
win10如何打开sqlserver配置管理器
2018-01-02 12:24 1059win10如何打开sqlserver配置管理器,windo ... -
数据库查询语言DQL使用介绍
2018-01-02 12:24 511(1)C++ppentry.C++om/list.php? ... -
Redis Basic在CentOS下安装指令
2018-01-02 12:23 496安装 C++entOS下安装指令: wge ... -
SpringBoot整合PageHelper实现数据库分页的代码教程
2018-01-02 12:23 747最近学习了SpringBoot 由于需要数据库分页功能 再 ... -
Day01_计算机硬件及启动流程
2017-12-26 17:23 551一.计算机硬件介绍 概念:由一条总线把CPU、内存和 ... -
python+Eclipse+pydev环境搭建
2017-12-26 17:12 399本文重点介绍使用Eclipse+pydev插件来写Pyth ... -
Python学习一:序列基础详解
2017-12-26 17:20 431作者:NiceCui 本文谢绝转载,如需转载需征得作 ...
相关推荐
06 FTP之断点续传 08 FTP之进度条 09 FTP之cd切换 11 FTP之创建文件夹及MD5校验思路 第33章 01 操作系统历史 02 进程的概念 03 线程的概念 04 线程的调用以及join方法 05 setDaemon方法和继承式调用.baiduyun....
7. RESTful API设计:为了使前后端分离,Django应用需要设计符合RESTful原则的API接口,以便前端通过Ajax请求获取后端数据。这涉及到URL路由设计、HTTP方法(GET、POST等)的使用,以及JSON数据格式的处理。 8. ...
至于PPT和课堂笔记.doc,它们可能是关于这个主题的教程资料,可能涵盖了文件上传下载的基本概念、常见问题及解决方案,包括但不限于文件大小限制、安全性(如防止恶意文件上传)、进度条显示、断点续传等。...
通常,开发者会使用像Node.js、Python Flask、Django或Java Spring等服务器框架来构建处理文件上传的接口。服务器需要验证文件类型、大小,并将其保存到指定位置。在此过程中,错误处理和安全性是至关重要的,例如...
- **AJAX上传**:为了提供更好的用户体验,现代网页应用常使用AJAX进行异步上传,这样用户无需等待整个文件上传完成就能看到反馈,通常结合jQuery或Fetch API实现。 - **前端验证**:前端代码可以检查文件类型、...
- 后端语言:如Java(Spring MVC)、Python(Django或Flask)、Node.js(Express)等,接收并处理文件上传请求。 - 文件存储:文件可能直接存储在服务器磁盘、云存储服务(如AWS S3、阿里云OSS)或者数据库(BLOB...
10. **性能优化**:对于大量图片上传,可能需要考虑分批上传、断点续传、使用CDN加速等内容,以优化上传性能和降低服务器压力。 综上所述,“上传图片”和“多个图片上传”功能涉及到前端交互、文件处理、网络通信...
7. **性能优化**:大文件上传可能会导致网络拥塞,因此需要考虑分块上传、断点续传等策略。同时,服务器端可能需要进行负载均衡和缓存策略来提高上传效率。 8. **错误处理和反馈**:良好的用户反馈机制是必要的,...
在Python中,可以使用Flask或Django框架;在Node.js中,Express是一个常见的选择;而在Java领域,Spring MVC可以很好地处理这类任务。 “dynamicUpload”这个名字暗示着这是一个动态文件上传的实现,可能包含动态...
在Python的Flask或Django框架中,有内置的文件上传处理函数;在Node.js中,Express框架配合multer库可以方便地处理文件上传。 总结一下,文件的上传和下载是Web应用中必不可少的功能,涉及到文件流的管理、安全性...
在JavaScript中,可能使用了AJAX技术来实现异步通信,确保用户在发送消息或文件时页面不会刷新,保持良好的用户体验。 注册和登录功能是任何聊天程序的基础。通常,前端会收集用户输入并发送到服务器进行验证,...
9. **API接口**:如果系统提供了API接口,其他应用程序或服务可以与之集成,例如通过API获取下载链接、监控下载状态等。 综上所述,"振风下载系统 V版"是一个功能全面的下载管理系统,结合了用户认证、文件下载、...
这里可能涉及的编程语言有Python的Flask或Django,Node.js的Express,Java的Spring Boot等。为了安全,需要验证文件类型和大小,防止恶意文件上传。 6. **存储服务**:图片通常不直接存储在服务器磁盘上,而是存放...
在IT行业中,文件上传是Web应用中常见的功能之一,它涉及到客户端与服务器之间的数据交互。本文将基于“文件上传问题”这一主题,结合提供的标签“源码”和“工具”,探讨文件上传的基本原理、常见问题及其解决方案...
这些文件可以通过`FormData`对象打包,然后通过Ajax或者Fetch API异步发送到服务器。 服务器端的处理则根据所使用的编程语言有所不同。例如,在PHP中,`$_FILES`全局变量会包含上传文件的信息,需要进行错误检查、...
2. 轮询与断点续传:在网络不稳定时,可以使用轮询检测上传状态,或支持断点续传功能。 综上所述,"Web文件上传"涉及到前端交互、后端处理、安全防范等多个方面,是Web开发中的重要组成部分。理解并掌握这些知识点...
在IT行业中,文件上传下载是Web应用的基本功能之一,它涉及到客户端与服务器之间的数据交互。本资源包提供了8个源码示例,旨在帮助开发者快速掌握文件上传和下载的实现方式。下面,我们将深入探讨这些知识点。 1. *...
- **Ajax异步上传**: 使用Ajax技术,文件上传可以在后台进行,不会阻塞用户界面,提升用户体验。XMLHttpRequest Level 2支持发送Blob或File对象,使得多文件上传成为可能。 2. **前端处理** - **文件预览**: 在上...
在JavaScript中,可以使用`XMLHttpRequest`或`fetch API`的`progress`事件,结合AJAX技术来实现。 4. **技术实现** - **前端**:HTML5的`FormData`对象用于封装待上传的文件,配合`XMLHttpRequest`或`fetch` API...
【标题】:“本人原创的半上传带进度条程序” 该标题揭示了这是一个个人开发者原创的程序,...通过分析源代码,我们可以学习到如何处理大文件上传、如何实现断点续传、如何优雅地展示进度以及如何处理上传错误等问题。