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图片相似度算法实现 js实现直方图和向量算法
Jan 14 Javascript
jQuery中slideUp 和 slideDown 的点击事件
Feb 26 Javascript
轻松学习jQuery插件EasyUI EasyUI表单验证
Dec 01 Javascript
Perl Substr()函数及函数的应用
Dec 16 Javascript
javascript中利用柯里化函数实现bind方法
Apr 29 Javascript
jquery中的常见问题及快速解决方法小结
Jun 14 Javascript
javascript 小数乘法结果错误的处理方法
Jul 28 Javascript
D3.js实现散点图和气泡图的方法详解
Sep 21 Javascript
JS简单实现获取元素的封装操作示例
Apr 07 Javascript
JS 插件dropload下拉刷新、上拉加载使用小结
Apr 13 Javascript
怎样在vue项目下添加ESLint的方法
May 16 Javascript
解决layui数据表格Date日期格式的回显Object的问题
Sep 19 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
Linux下php5.4启动脚本
2014/08/03 PHP
javascript数组与php数组的地址传递及值传递用法实例
2015/01/22 PHP
php通过array_shift()函数移除数组第一个元素的方法
2015/03/18 PHP
在Linux系统下一键重新安装WordPress的脚本示例
2015/06/30 PHP
php实现等比例压缩图片
2018/07/26 PHP
js文件中调用js的实现方法小结
2009/10/23 Javascript
xml文档转换工具,附图表例子(hta)
2010/11/17 Javascript
javascript的原生方法获取数组中的最大(最小)值
2012/12/19 Javascript
html页面显示年月日时分秒和星期几的两种方式
2013/08/20 Javascript
jQuery动态创建html元素的常用方法汇总
2014/09/05 Javascript
node.js中的fs.lstatSync方法使用说明
2014/12/16 Javascript
innerHTML属性,outerHTML属性,textContent属性,innerText属性区别详解
2015/03/13 Javascript
JavaScript包装对象使用详解
2015/07/09 Javascript
javascript实现添加附件功能的方法
2015/11/18 Javascript
js 判断各种数据类型的简单方法(推荐)
2016/08/29 Javascript
jQuery除指定区域外点击任何地方隐藏DIV功能
2017/11/13 jQuery
详解vue项目中实现图片裁剪功能
2019/06/07 Javascript
vue实现图片上传预览功能
2019/12/23 Javascript
解决Vue router-link绑定事件不生效的问题
2020/07/22 Javascript
vue实现折线图 可按时间查询
2020/08/21 Javascript
Vue实现Header渐隐渐现效果的实例代码
2020/11/05 Javascript
[00:32]2018DOTA2亚洲邀请赛VGJ.T出场
2018/04/03 DOTA
用Python实现一个简单的能够发送带附件的邮件程序的教程
2015/04/08 Python
Python字符串切片操作知识详解
2016/03/28 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
2020/01/02 Python
HTML5等待加载动画效果
2017/07/27 HTML / CSS
为什么要有struct关键字
2012/05/08 面试题
行政求职信
2014/07/04 职场文书
投标授权委托书范文
2014/08/02 职场文书
2014年终个人总结报告
2015/03/09 职场文书
酒店采购员岗位职责
2015/04/03 职场文书
2015年度物业公司工作总结
2015/04/27 职场文书
预备党员介绍人意见
2015/06/01 职场文书
公司年会主持词范文!
2019/05/07 职场文书
php中配置文件保存修改操作 如config.php文件的读取修改等操作
2021/05/12 PHP
MySQL 十大常用字符串函数详解
2021/06/30 MySQL