关于jquery.form.js插件的无刷新上传文件使用的问题
2012-12-12 09:40
1081 查看
(一)如何使用:它的文件无刷新上传写法跟jquery的ajax差不多,也不多说了,看下面代码估计就知道了,注意设置表单属性enctype="multipart/form-data"
(二)遇到问题:ASP.NET MVC中返回JsonResult对象时,IE8提示下载文件
(1)看我是如何操作的:利用如下代码无刷新上传文件
(2)在Chrome没有发现不正常,但是在IE8却发现提示下载文件。这个真是一个纠结。后面看看问题所在吧。
IE 不支持 contentType 为application/json,在 ajax 上传文件完成后返回 json时 IE 提示下载文件。
这下,应该有点感觉了吧?其实,我们的controller返回的是json的对象啊!这个得从http协议说起,http响应头有个ContentType ,它告诉浏览器返回的内容是什么类型。一般的文本、html响应的头中contentType为text/html。而在我们这样的操作中,会返回application/json的响应头,不识别application/json的浏览器下就认为是文件了,所以嘛,呵呵。
(3)解决方法
在jquery.form.js这个插件中, 其实是模拟ajax,它也是一个iframe去submit 接着从iframe域取响应的文本。它的实现是利用返回的responseText来处理。也就是说,你要是返回一个text/html的contentType,那它就能接收到,并且对这个返回的数据进行处理。因此,我们返回的不应该是一个json对象,而是一个json字符串!
好吧,说了这么多,也该大致清楚了,其后台的处理用代码表示大致是这样:
asp.net mvc中正确的处理方法是:设置option的{ dataType: 'json'} 属性,而在返回中可以这样写 return Json(json,"text/html");
java 中的处理方法是,response.ContentType = "text/html";response.Write("{\"result\":true}");
以上属于个人看法,具体不对的地方欢迎指教!
(二)遇到问题:ASP.NET MVC中返回JsonResult对象时,IE8提示下载文件
(1)看我是如何操作的:利用如下代码无刷新上传文件
var options = { target: '#outputdiv', beforeSubmit: showRequest, success: function (data) { if (data.Success == true) { } else { alert('导入失败!请注意检查excel的格式!'); } }, error: function () { alert("请求出错"); } }; $('#fileUpload').ajaxSubmit(options);
[AcceptVerbs(HttpVerbs.Post)] public JsonResult ExcelUpload(HttpPostedFileBase fileUpload){ /**此处省略json对象的处理代码*/ return Json(json);
(2)在Chrome没有发现不正常,但是在IE8却发现提示下载文件。这个真是一个纠结。后面看看问题所在吧。
IE 不支持 contentType 为application/json,在 ajax 上传文件完成后返回 json时 IE 提示下载文件。
这下,应该有点感觉了吧?其实,我们的controller返回的是json的对象啊!这个得从http协议说起,http响应头有个ContentType ,它告诉浏览器返回的内容是什么类型。一般的文本、html响应的头中contentType为text/html。而在我们这样的操作中,会返回application/json的响应头,不识别application/json的浏览器下就认为是文件了,所以嘛,呵呵。
(3)解决方法
在jquery.form.js这个插件中, 其实是模拟ajax,它也是一个iframe去submit 接着从iframe域取响应的文本。它的实现是利用返回的responseText来处理。也就是说,你要是返回一个text/html的contentType,那它就能接收到,并且对这个返回的数据进行处理。因此,我们返回的不应该是一个json对象,而是一个json字符串!
好吧,说了这么多,也该大致清楚了,其后台的处理用代码表示大致是这样:
HttpContext.Response.Clear(); HttpContext.Response.ContentType = "text/html"; HttpContext.Response.Write("{\"result\":true}"); HttpContext.Response.End();
asp.net mvc中正确的处理方法是:设置option的{ dataType: 'json'} 属性,而在返回中可以这样写 return Json(json,"text/html");
java 中的处理方法是,response.ContentType = "text/html";response.Write("{\"result\":true}");
以上属于个人看法,具体不对的地方欢迎指教!
相关文章推荐
- js无刷新无插件异步上传文件,使用dojo.io.iframe发送form数据包
- 使用jquery.form.js实现无刷新上传文件
- 关于使用jQuery-form.js上传文件的注意事项
- 关于使用jquery.form.js上传文件同时提交表单的方法
- Struts2 Ajax文件上传功能 使用Jquery.form插件
- jQuery不使用插件及swf实现无刷新文件上传
- jquery.form.js官方插件介绍Form插件,支持Ajax,支持Ajax文件上传
- 使用jQuery.form插件实现表单异步提交+上传文件
- 使用ajaxFileUpload.js插件实现ajax无刷新上传文件
- MVC4中使用Jquery.Multifile.js和Jquery.form.js一次上传多个文件
- MVC4中使用Jquery.Multifile.js和Jquery.form.js一次上传多个文件
- 【文件上传】使用jquery.form.js来实现表单提交
- 使用jquery.form.js+servlet实现文件异步上传
- 使用jQuery.form插件实现表单异步提交+上传文件
- node.js中关于使用formidable模块实现文件上传至指定目录的问题
- 关于文件上传jQuery插件jquery.uploadify的使用心得
- js 使用jquery.form.js文件上传
- jQuery ajax + ajaxfileupload.js插件 实现无刷新文件上传
- 使用 jquery 的 form 插件上传文件 实验
- 使用jquery.form.js上传图片或文件