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代码
Aug 13 Javascript
javascript 密码强弱度检测万能插件
Feb 25 Javascript
获取客户端网卡MAC地址和IP地址实现JS代码
Mar 17 Javascript
js原型继承的两种方法对比介绍
Mar 30 Javascript
jQuery中的siblings用法实例分析
Dec 24 Javascript
Kendo Grid editing 自定义验证报错提示的解决方法
Nov 18 Javascript
浅谈JavaScript的闭包函数
Dec 08 Javascript
创建简单的node服务器实例(分享)
Jun 23 Javascript
Vue2.0基于vue-cli+webpack Vuex的用法(实例讲解)
Sep 15 Javascript
JS实现简单表格排序操作示例
Oct 07 Javascript
JavaScript字符串处理常见操作方法小结
Nov 15 Javascript
CocosCreator入门教程之网络通信
Apr 16 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
jq的get传参数在utf-8中乱码问题的解决php版
2008/07/23 PHP
解析PHP中数组元素升序、降序以及重新排序的函数
2013/06/20 PHP
php表单敏感字符过滤类
2014/12/08 PHP
php中ob函数缓冲机制深入理解
2015/08/03 PHP
yii2使用ajax返回json的实现方法
2016/05/14 PHP
Yii中的relations数据关联查询及统计功能用法详解
2016/07/14 PHP
javascript setTimeout和setInterval 的区别
2009/12/08 Javascript
利用js实现遮罩以及弹出可移动登录窗口
2013/07/08 Javascript
js 上下左右键控制焦点(示例代码)
2013/12/14 Javascript
基于jQuery实现音乐播放试听列表
2016/04/14 Javascript
Easyui Treegrid改变默认图标的方法
2016/04/29 Javascript
ES6中class类用法实例浅析
2017/04/06 Javascript
webpack处理 css\less\sass 样式的方法
2017/08/21 Javascript
bootstrap-table实现服务器分页的示例 (spring 后台)
2017/09/01 Javascript
p5.js实现斐波那契螺旋的示例代码
2018/03/22 Javascript
vue路由组件按需加载的几种方法小结
2018/07/12 Javascript
微信小程序实现天气预报功能
2018/07/18 Javascript
详解webpack4.x之搭建前端开发环境
2019/03/28 Javascript
elementUI vue this.$confirm 和el-dialog 弹出框 移动 示例demo
2019/07/03 Javascript
HTML+JavaScript实现扫雷小游戏
2019/09/30 Javascript
es6函数中的作用域实例分析
2020/04/18 Javascript
[05:05]给小松五分钟系列 第二期介绍为什么打DOTA2
2014/07/02 DOTA
python模块smtplib学习
2018/05/22 Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
2019/08/15 Python
pytorch: Parameter 的数据结构实例
2019/12/31 Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
2020/02/27 Python
Python序列化pickle模块使用详解
2020/03/05 Python
Pycharm激活方法及详细教程(详细且实用)
2020/05/12 Python
三星英国官网:Samsung英国
2018/09/25 全球购物
本科生求职简历的自我评价
2013/10/21 职场文书
美国探亲签证邀请信
2014/02/05 职场文书
安全负责人任命书
2014/06/06 职场文书
“四风”问题对照检查材料思想汇报
2014/09/16 职场文书
交通事故委托书范本
2014/09/28 职场文书
简单的辞职信范文(2016最新版)
2015/05/12 职场文书
2019求职信:应届生求职信范文
2019/04/24 职场文书