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 相关文章推荐
为radio类型的INPUT添加客户端脚本(附加实现JS来禁用onClick事件思路代码)
Nov 11 Javascript
jquery制作居中遮罩层效果分享
Feb 21 Javascript
借助javascript代码判断网页是静态还是伪静态
May 05 Javascript
了不起的node.js读书笔记之node的学习总结
Dec 22 Javascript
浅析JS异步加载进度条
May 05 Javascript
JS复制对应id的内容到粘贴板(Ctrl+C效果)
Jan 23 Javascript
DOM事件探秘篇
Feb 15 Javascript
性能优化之代码优化页面加载速度
Mar 01 Javascript
Vue学习笔记进阶篇之过渡状态详解
Jul 14 Javascript
使用vue实现多规格选择实例(SKU)
Aug 23 Javascript
layui中select,radio设置不生效的解决方法
Sep 05 Javascript
vue的滚动条插件实现代码
Sep 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
解析如何去掉CodeIgniter URL中的index.php
2013/06/25 PHP
深入认识JavaScript中的函数
2007/01/22 Javascript
JQUERY设置IFRAME的SRC值的代码
2010/11/30 Javascript
javascript在myeclipse中报错的解决方法
2013/10/29 Javascript
javascript break指定标签打破多层循环示例
2014/01/20 Javascript
javascript实现checkBox的全选,反选与赋值
2015/03/12 Javascript
jqGrid表格应用之新增与删除数据附源码下载
2015/12/02 Javascript
谈一谈javascript中继承的多种方式
2016/02/19 Javascript
利用JQuery写一个简单的异步分页插件
2016/03/07 Javascript
在JavaScript中模拟类(class)及类的继承关系
2016/05/20 Javascript
JavaScript代码实现图片循环滚动效果
2020/03/19 Javascript
jquery+ajax实现直接提交表单实例分析
2016/06/17 Javascript
JS判断iframe是否加载完成的方法
2016/08/03 Javascript
微信小程序 wx.uploadFile无法上传解决办法
2016/12/14 Javascript
Jquery Easyui搜索框组件SearchBox使用详解(19)
2016/12/17 Javascript
微信小程序 引入es6 promise
2017/04/12 Javascript
基于js中的原型(全面讲解)
2017/09/19 Javascript
JS实现的计数排序与基数排序算法示例
2017/12/04 Javascript
Vue.set()实现数据动态响应的方法
2018/02/07 Javascript
浅谈vue中组件绑定事件时是否加.native
2019/11/09 Javascript
微信小程序收藏功能的实现代码
2020/06/19 Javascript
浅谈JavaScript中等号、双等号、 三等号的区别
2020/08/06 Javascript
python条件和循环的使用方法
2013/11/01 Python
Python多线程编程(七):使用Condition实现复杂同步
2015/04/05 Python
Python实现批量下载文件
2015/05/17 Python
python读取各种文件数据方法解析
2018/12/29 Python
YesBabyOnline美国:全球性的在线婚纱礼服工厂
2018/05/05 全球购物
Nasty Gal英国:美国女性服饰销售网站
2021/03/02 全球购物
大四学生找工作的自荐信
2014/03/27 职场文书
培训协议书范本
2014/04/22 职场文书
领导班子遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
2015年元旦主持词开场白
2014/12/14 职场文书
优秀党务工作者先进事迹材料
2014/12/25 职场文书
清洁工个人工作总结
2015/03/05 职场文书
卡特教练观后感
2015/06/08 职场文书
Nginx配置之禁止指定IP访问
2022/05/02 Servers