jQuery.form插件的使用及跨域异步上传文件


Posted in Javascript onApril 27, 2016

先说明白

这个跨域异步上传功能我们借助了Jquery.form插件,它在异步表单方面很有成效,而跨域我们会在HTTP响应头上添加 access-control-allow-method,当然这个头标记只有IE10,火狐和谷歌上支持,对于IE10以下的浏览器来说,我们就不能用这种方式了,我们需要换个思路去干这事,让服务端去重写向我们的客户端,由客户端(与文件上传页面在同域下)来返回相关数据即可。

再做事

1 Jquery.form的使用

<form method="post" action="http://127.0.0.1:801/Home/UploadResult" enctype="multipart/form-data" id="form1">
<input name="qdctvfile" id="qdctvfile11" type="file" onchange="eventStart()">
</form>
<script type="text/javascript">
$("#form1").ajaxForm({
beforeSerialize: function () {
var filepath = $("#qdctvfile11").val()
var extStart = filepath.lastIndexOf(".");
var ext = filepath.substring(extStart, filepath.length).toUpperCase();
if (ext != ".PNG" && ext != ".JPG") {
alert("图片仅支持png,jpg格式");
$("#qdctvfile11").val("");
return false;
}
},
success: function (data) {
alert(data);
}
});
function eventStart(obj) {
$("#form1").submit();
}

注意,代码中的eventStart方法是指在选择文件后,自动提交表单,而ajaxForm表示提交表单为异常方式,success回调方法是指 异步返回表单地址 的返回值。

2 跨域的初步实现

解决域访问,我们可以在服务端的响应头上添加Access-Control-Allow-Origin和Access-Control-Allow-Methods两个特性即可,这些特性在IE10以下的浏览器不被支持,很是郁闷。

/// <summary>
/// MVC模式下跨域访问
/// </summary>
public class MvcCorsAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
Dictionary<string, string> headers = new Dictionary<string, string>();
headers.Add("Access-Control-Allow-Origin", "*");
headers.Add("Access-Control-Allow-Methods", "*");
foreach (var item in headers.Keys)
{
filterContext.RequestContext.HttpContext.Response.Headers.Add(item, headers[item]);
}
base.OnActionExecuting(filterContext);
}
}

注意,在生产环境下,我们的 Access-Control-Allow-Origin 应该是指定合法的域名的,*表示对所以网站都开放访问,这是危险的。

3 解决IE10以下不能跨域的问题

对于IE浏览器确实没法说了,虽然很喜欢微软的东西,但对于IE来说,我只能是NO,我真不想过多的去谈论它,先看看IE实现跨域上传的解决思想:由客户端不直接返回数据,而是重写向到客户端的callback地址,由 callback 像 ajaxForm 方法返回最终的数据,这

样就解决了直接的跨域问题了。

/// <summary>
/// 第三方的服务端
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
[HttpPost]
public ActionResult UploadResult()
{
string data = "{'code':'OK','thumpImgUrl':'http://127.0.0.1/images/1.jpg'}";
return Redirect("http://localhost:9497/Home/UploadCallback?data=" + data);
}
/// <summary>
/// 可能是服务端来调用它
/// </summary>
/// <returns></returns>
public ActionResult UploadCallback(string data)
{
return Content(data);
}

有些时候,我们在想一个问题的解决方法时,如果一条路走不通过,可以换换思路,也许会有意外的收获!

有人问,这块使用POST方式在服务端与客户端进行数据传递可以不可以,大叔说:不可以,因为POST在提交到客户端后,客户端处理,然后还是把结果返回给服务端,最后服务端再把结果返回给ajaxform,这还是又回到了开始的跨域问题,哈哈!

jQuery.form插件的使用及跨域异步上传文件

以上所述是小编给大家介绍的基于jQuery.form插件实现jQuery跨域异步上传文件的相关内容,希望对大家有所帮助!

Javascript 相关文章推荐
javascript showModalDialog模态对话框使用说明
Dec 31 Javascript
javascript中判断一个值是否在数组中并没有直接使用
Dec 17 Javascript
设为首页加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
Mar 26 Javascript
BootStrap文件上传样式超好看【持续更新】
May 10 Javascript
AngularJS Bootstrap详细介绍及实例代码
Jul 28 Javascript
JavaScript 冒泡排序和选择排序的实现代码
Sep 03 Javascript
AngularJS  双向数据绑定详解简单实例
Oct 20 Javascript
jQuery实现的checkbox级联选择下拉菜单效果示例
Dec 26 Javascript
详解AngularJS脏检查机制及$timeout的妙用
Jun 19 Javascript
Javascript删除数组里的某个元素
Feb 28 Javascript
Vue.js轮播图走马灯代码实例(全)
May 08 Javascript
vue基于better-scroll仿京东分类列表
Jun 30 Javascript
js实现纯前端的图片预览
Apr 27 #Javascript
简介BootStrap model弹出框的使用
Apr 27 #Javascript
js调用webservice构造SOAP进行身份验证
Apr 27 #Javascript
javascript实现延时显示提示框特效代码
Apr 27 #Javascript
JS延时器提示框的应用实例代码解析
Apr 27 #Javascript
基于JS实现Android,iOS一个手势动画效果
Apr 27 #Javascript
requireJS使用指南
Apr 27 #Javascript
You might like
CodeIgniter中使用cookie的三种方式详解
2014/07/18 PHP
php 实现进制相互转换
2016/04/07 PHP
PHP Yaf框架的简单安装使用教程(推荐)
2016/06/08 PHP
php 后端实现JWT认证方法示例
2018/09/04 PHP
js模拟实现Array的sort方法
2007/12/11 Javascript
js arguments,jcallee caller用法总结
2013/11/30 Javascript
超棒的响应式布局jQuery插件Freetile.js
2014/11/17 Javascript
jQuery实现折线图的方法
2015/02/28 Javascript
noty ? jQuery通知插件全面解析
2016/05/18 Javascript
bootstrap table小案例
2016/10/21 Javascript
教大家轻松制作Bootstrap漂亮表格(table)
2016/12/13 Javascript
Javascript实现登录记住用户名和密码功能
2017/03/22 Javascript
vue.js如何更改默认端口号8080为指定端口的方法
2017/07/14 Javascript
微信小程序数据存储与取值详解
2018/01/30 Javascript
浅谈vue项目可以从哪些方面进行优化
2018/05/05 Javascript
如何使用webpack打包一个库library的方法步骤
2019/12/18 Javascript
js实现中文实时时钟
2020/01/15 Javascript
Vue 技巧之控制父类的 slot
2020/02/24 Javascript
原生JavaScript实现购物车
2021/01/10 Javascript
[05:16]《大圣!大圣》——DOTA2新英雄齐天大圣配音李世宏老师专访
2016/12/13 DOTA
Python中的yield浅析
2014/06/16 Python
基础的十进制按位运算总结与在Python中的计算示例
2016/06/28 Python
Python使用email模块对邮件进行编码和解码的实例教程
2016/07/01 Python
python3 shelve模块的详解
2017/07/08 Python
Python with语句上下文管理器两种实现方法分析
2018/02/09 Python
Python3实现发送邮件和发送短信验证码功能
2020/01/07 Python
python opencv实现信用卡的数字识别
2020/01/12 Python
Python稀疏矩阵及参数保存代码实现
2020/04/18 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
2020/08/07 Python
纯HTML5+CSS3制作图片旋转
2016/01/12 HTML / CSS
利用HTML5 Canvas制作一个简单的打飞机游戏
2015/05/11 HTML / CSS
波兰灯具、照明和LED购物网站:Lampy.pl
2019/03/11 全球购物
Habitat家居英国官方网站:沙发、家具、照明、厨房和户外
2019/12/12 全球购物
大学生简短的自我评价
2014/09/12 职场文书
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
2021/06/22 Python
详解Java ES多节点任务的高效分发与收集实现
2021/06/30 Java/Android