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 20 Javascript
基于jquery的回到页面顶部按钮
Jun 27 Javascript
JavaScript的原型继承详解
Feb 15 Javascript
JS实现模拟风力的雪花飘落效果
May 13 Javascript
jQuery右下角旋转环状菜单特效代码
Aug 10 Javascript
javascript验证手机号和实现星号(*)代替实例
Aug 16 Javascript
jQuery与js实现颜色渐变的方法
Dec 30 Javascript
js实现颜色阶梯渐变效果(Gradient算法)
Mar 21 Javascript
解决浏览器会自动填充密码的问题
Apr 28 Javascript
jQuery niceScroll滚动条错位问题的解决方法
Feb 03 jQuery
jquery实现直播视频弹幕效果
Feb 25 jQuery
如何在selenium中使用js实现定位
Aug 18 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
php简单提示框alert封装函数
2010/08/08 PHP
解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法
2015/12/18 PHP
php + WebUploader实现图片批量上传功能
2019/05/06 PHP
php实现根据身份证获取精准年龄
2020/02/26 PHP
PHP中isset、empty的用法与区别示例详解
2020/11/05 PHP
Javascript之文件操作
2007/03/07 Javascript
js实现的真正的iframe高度自适应(兼容IE,FF,Opera)
2010/03/07 Javascript
jquery中动态效果小结
2010/12/16 Javascript
JS小功能(操作Table--动态添加删除表格及数据)实现代码
2013/11/28 Javascript
Js 获取、判断浏览器版本信息的简单方法
2016/08/08 Javascript
ES6中Math对象的部分扩展
2017/02/20 Javascript
webpack分离css单独打包的方法
2018/06/12 Javascript
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
2018/10/26 Javascript
require.js 加载过程与使用方法介绍
2018/10/30 Javascript
axios+Vue实现上传文件显示进度功能
2019/04/14 Javascript
基于vue的tab-list类目切换商品列表组件的示例代码
2020/02/14 Javascript
vue组件暴露和.js文件暴露接口操作
2020/08/11 Javascript
vue如何使用rem适配
2021/02/06 Vue.js
Python中的下划线详解
2015/06/24 Python
python编码总结(编码类型、格式、转码)
2016/07/01 Python
Python实现二维数组按照某行或列排序的方法【numpy lexsort】
2017/09/22 Python
Python 获取ftp服务器文件时间的方法
2019/07/02 Python
解决python flask中config配置管理的问题
2019/07/26 Python
python打印异常信息的两种实现方式
2019/12/24 Python
实例代码讲解Python 线程池
2020/08/24 Python
Pytho爬虫中Requests设置请求头Headers的方法
2020/09/22 Python
纯CSS3实现Material Design效果
2017/03/09 HTML / CSS
使用CSS3实现圆角,阴影,透明
2014/12/23 HTML / CSS
HTML5移动端开发中的Viewport标签及相关CSS用法解析
2016/04/15 HTML / CSS
澳大利亚家居用品零售商:Harris Scarfe
2020/10/10 全球购物
社会保险接收函
2014/01/12 职场文书
求职信怎么写范文
2014/05/26 职场文书
中专毕业生的自荐书
2014/07/01 职场文书
无财产离婚协议书范本
2014/10/28 职场文书
给领导的感谢信范文
2015/01/23 职场文书
Django显示可视化图表的实践
2021/05/10 Python