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 复制数组实现代码
Nov 26 Javascript
两种WEB下的模态对话框 (asp.net或js的分别实现)
Dec 02 Javascript
JavaScript获取页面上被选中文字的方法技巧
Mar 13 Javascript
JavaScript实现信用卡校验方法
Apr 07 Javascript
Javascript对象Clone实例分析
Jun 09 Javascript
基于jQuery实现选取月份插件附源码下载
Dec 28 Javascript
js判断鼠标位置是否在某个div中的方法
Feb 26 Javascript
jquery滚动条插件slimScroll使用方法
Feb 09 Javascript
微信小程序后台解密用户数据实例详解
Jun 28 Javascript
详解Vue路由History mode模式中页面无法渲染的原因及解决
Sep 28 Javascript
vue+elementUI实现简单日历功能
Sep 24 Javascript
javascript条件式访问属性和箭头函数介绍
Nov 17 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
肝肠寸断了解下!盘点史上最伤心的十大动漫
2020/03/04 日漫
php Http_Template_IT类库进行模板替换
2009/03/19 PHP
php获取图片信息的方法详解
2015/12/10 PHP
[原创]php使用curl判断网页404(不存在)的方法
2016/06/23 PHP
Underscore.js 的模板功能介绍与应用
2012/12/24 Javascript
js模仿windows桌面图标排列算法具体实现(附图)
2013/06/16 Javascript
用javascript关闭本窗口技巧小结
2014/09/05 Javascript
JavaScript中的ArrayBuffer详细介绍
2014/12/08 Javascript
MVC+jQuery.Ajax异步实现增删改查和分页
2020/12/22 Javascript
基于JS实现弹出一个隐藏的div窗口body页面变成灰色并且不可被编辑
2016/12/14 Javascript
JavaScript调试的多个必备小Tips
2017/01/15 Javascript
JavaScript队列函数和异步执行详解
2017/06/19 Javascript
快速搭建React的环境步骤详解
2017/11/06 Javascript
koa上传excel文件并解析的实现方法
2018/08/09 Javascript
如何使用less实现随机下雪动画详解
2019/01/02 Javascript
JavaScript实现留言板案例
2020/03/17 Javascript
如何在微信小程序中使用骨架屏的步骤
2020/06/12 Javascript
解决vue addRoutes不生效问题
2020/08/04 Javascript
[14:57]DOTA2 HEROS教学视频教你分分钟做大人-幽鬼
2014/06/13 DOTA
python发送邮件接收邮件示例分享
2014/01/21 Python
Python字符串拼接的几种方法整理
2017/08/02 Python
Python实现图片拼接的代码
2018/07/02 Python
python实现爬山算法的思路详解
2019/04/09 Python
Python3日期与时间戳转换的几种方法详解
2019/06/04 Python
使用PYTHON解析Wireshark的PCAP文件方法
2019/07/23 Python
Python调用C语言的实现
2019/07/26 Python
详谈tensorflow gfile文件的用法
2020/02/05 Python
M1芯片安装python3.9.1的实现
2021/02/02 Python
canvas绘制表情包的示例代码
2018/07/09 HTML / CSS
澳大利亚领先的宠物用品商店:VetSupply
2017/09/08 全球购物
波兰家居饰品和厨房配件网上商店:Maleomi
2020/12/15 全球购物
会计电算化应届生求职信
2013/11/03 职场文书
优秀实习生感言
2014/03/01 职场文书
高等教育专业自荐信范文
2014/03/26 职场文书
《爱如茉莉》教后反思
2014/04/12 职场文书
活动总结怎么写
2014/04/28 职场文书