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 相关文章推荐
JS 日期验证正则附asp日期格式化函数
Sep 11 Javascript
input输入框的自动匹配(原生代码)
Mar 19 Javascript
基于JavaScript实现 获取鼠标点击位置坐标的方法
Apr 12 Javascript
iframe子父页面调用js函数示例
Nov 07 Javascript
jquery插件之定时查询待处理任务数量
May 01 Javascript
javascript每日必学之条件分支
Feb 17 Javascript
浅谈jQuery效果函数
Sep 16 Javascript
javascript中活灵活现的Array对象详解
Nov 30 Javascript
bootstrap模态框消失问题的解决方法
Dec 02 Javascript
JavaScript实现的可变动态数字键盘控件方式实例代码
Jul 15 Javascript
简单实现jQuery手风琴效果
Aug 18 jQuery
Bootstrap Table列宽拖动的方法
Aug 15 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
phpmyadmin 常用选项设置详解版
2010/03/07 PHP
基于PHP CURL用法的深入分析
2013/06/09 PHP
php cli模式下获取参数的方法
2017/05/05 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
2018/05/11 PHP
禁止JQuery中的load方法装载IE缓存中文件的方法
2009/09/11 Javascript
php上传图片并给图片打上透明水印的代码
2010/06/07 Javascript
常用一些Javascript判断函数
2012/08/14 Javascript
js防止DIV布局滚动时闪动的解决方法
2014/10/30 Javascript
浅谈setTimeout 与 setInterval
2015/06/23 Javascript
js实现背景图自适应窗口大小
2017/01/10 Javascript
Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound的解决方法
2017/01/19 Javascript
Javascript中的 “&amp;” 和 “|” 详解
2017/02/02 Javascript
JavaScript去掉数组重复项的方法分析【测试可用】
2018/07/19 Javascript
vue中当图片地址无效的时候,显示默认图片的方法
2018/09/18 Javascript
Vue实现计算器计算效果
2020/08/17 Javascript
[54:06]OG vs TNC 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python ORM框架SQLAlchemy学习笔记之数据查询实例
2014/06/10 Python
Python中MySQLdb和torndb模块对MySQL的断连问题处理
2015/11/09 Python
Python批量创建迅雷任务及创建多个文件
2016/02/13 Python
python 统计代码行数简单实例
2017/05/04 Python
利用python的socket发送http(s)请求方法示例
2018/05/07 Python
python使用pygame框架实现推箱子游戏
2018/11/20 Python
PyCharm 配置远程python解释器和在本地修改服务器代码
2019/07/23 Python
Python操作Jira库常用方法解析
2020/04/10 Python
美国购买韩国护肤和美容产品网站:Althea Korea
2020/11/16 全球购物
应届生船舶驾驶求职信
2013/10/19 职场文书
安全检查验收制度
2014/01/12 职场文书
高三家长寄语
2014/04/03 职场文书
优秀学生干部先进事迹材料
2014/05/26 职场文书
学校法制宣传日活动总结
2014/11/01 职场文书
2015年“公民道德宣传日”活动方案
2015/05/06 职场文书
海上钢琴师的观后感
2015/06/11 职场文书
《我们的民族小学》教学反思
2016/02/19 职场文书
详解非极大值抑制算法之Python实现
2021/06/28 Python
世界十大狙击步枪排行榜
2022/03/20 杂记
Java 获取Word中所有的插入和删除修订的方法
2022/04/06 Java/Android