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 相关文章推荐
基于jquery的finkyUI插件与Ajax实现页面数据加载功能
Dec 03 Javascript
微信小程序  网络请求API详解
Oct 25 Javascript
基于jquery实现的鼠标悬停提示案例
Dec 11 Javascript
JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome
Jan 05 Javascript
javascript基础知识讲解
Jan 11 Javascript
AngularJS之ionic 框架下实现 Localstorage本地存储
Apr 22 Javascript
利用JavaScript实现栈的数据结构示例代码
Aug 02 Javascript
微信小程序url与token设置详解
Sep 26 Javascript
Vue.js进阶知识点总结
Apr 01 Javascript
详解webpack模块化管理和打包工具
Apr 21 Javascript
使用form-create动态生成vue自定义组件和嵌套表单组件
Jan 18 Javascript
微信小程序pinker组件使用实现自动相减日期
May 07 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 static局部静态变量和全局静态变量总结
2014/03/02 PHP
php生成条形码的图片的实例详解
2017/09/13 PHP
php实现统计IP数及在线人数的示例代码
2020/07/22 PHP
对textarea框的代码调试,而且功能上使用非常方便,酷
2006/06/30 Javascript
IE和Firefox在JavaScript应用中的兼容性探讨
2008/04/01 Javascript
window.name代替cookie的实现代码
2010/11/28 Javascript
jquery uaMatch源代码
2011/02/14 Javascript
点击隐藏页面左栏或右栏实现js代码
2013/04/01 Javascript
详解AngularJS中的依赖注入机制
2015/06/17 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
2016/12/14 Javascript
jQuery Password Validation密码验证
2016/12/30 Javascript
Three.js实现绘制字体模型示例代码
2017/09/26 Javascript
vue滚动轴插件better-scroll使用详解
2017/10/17 Javascript
Angularjs渲染的 using 指令的星级评分系统示例
2017/11/09 Javascript
swiper移动端轮播插件(触碰图片之后停止轮播)
2017/12/28 Javascript
JavaScript设计模式之职责链模式应用示例
2018/08/07 Javascript
详解Vue中的scoped及穿透方法
2019/04/18 Javascript
vue项目中实现缓存的最佳方案详解
2019/07/11 Javascript
js异步接口并发数量控制的方法示例
2020/11/22 Javascript
[03:31]DOTA2英雄基础教程 大地之灵
2013/12/17 DOTA
Python基础学习之常见的内建函数整理
2017/09/06 Python
Django ORM框架的定时任务如何使用详解
2017/10/19 Python
Python pymongo模块用法示例
2018/03/31 Python
python中ASCII码和字符的转换方法
2018/07/09 Python
pyqt5的QComboBox 使用模板的具体方法
2018/09/06 Python
OpenCV模板匹配matchTemplate的实现
2019/10/18 Python
pytorch中tensor.expand()和tensor.expand_as()函数详解
2019/12/27 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
2020/03/24 Python
Django ORM filter() 的运用详解
2020/05/14 Python
Oakley官网:运动太阳镜、雪镜和服装
2016/09/30 全球购物
TripAdvisor德国:全球领先的旅游网站
2017/12/07 全球购物
公司任命书范本
2014/06/04 职场文书
护理工作个人总结
2015/03/03 职场文书
房地产置业顾问岗位职责
2015/04/11 职场文书
如何用JavaScript检测当前浏览器是无头浏览器
2021/04/27 Javascript
 分享一个Python 遇到数据库超好用的模块
2022/04/06 Python