ajax与jquery ajax异步刷新的异步提交,他在什么情况下会走error

今天看啥 热点:
jQuery 关于IE9上传文件无法进入后台问题的原因及解决办法(ajaxfileupload.js第四弹),jqueryie9第四弹的诞生完全不在自己最初的计划之中,是有个网友看了先前关于《ajaxfileupload.js系列》的文章后提出的问题,由于自己一直是用chrome浏览器去测试demo,完全忽略IE浏览器(其实是故意的,懒得想浏览器兼容的问题,哈哈~),所以当我使用IE9去运行demo的时候,确实发现了同样的问题,就是ajax异步提交表单无法进入后台。
下面是解决整个问题的过程,以我在《jQuery 自制上传头像插件-附带Demo实例(ajaxfileupload.js第三弹) 》中上传的demo为基准,这样会更加容易理解一些。
虽然整个问题的表面现象是ajax异步提交表单无法进入后台,但是当我在浏览器中跟代码走一遍的时候,发现的首个问题就是下面的提示。
出现这个问题的原因其实要归罪于
function getFilePath(obj) {
if (obj) {
if (window.navigator.userAgent.indexOf("MSIE") &= 1) {
obj.select();
return document.selection.createRange().
else if (window.navigator.userAgent.indexOf("Firefox") &= 1) {
if (obj.files) {
return obj.files.item(0).getAsDataURL();
return obj.
return obj.
这个函数,最初加这个函数的时候是为了可以兼容,不巧,却弄巧成拙了。
这个函数是从网上直接贴下来的,当时就是怕不同浏览器直接用$().val()得不到选择的文件名称。但是当使用IE浏览器时,实际上这段代码返回的document.selection.createRange().text这个是一个&&(空字符串),所以这块可以直接使用obj.value或者无需使用这个方法,直接通过$().val()得到文件名就行。
而令我诧异的是,在IE下使用$().val()居然能得到文件的完整路径!!!而不单单只是一个文件名,这样就不用先上传再预览了,可以直接预览图片了。
这个问题解决了,重新运行代码,出现
这个问题的原因是在jQuery-1.4.2插件之后,已经去掉了handleError的方法,而下载了demo的朋友会发现,demo中使用的是jQuery-2.0.3插件。那么是不是把jQuery插件换一下就行了?不行。因为之所以用jQuery-2.0.3是因为只有在jQuery-1.7版本之后才支持delegate方法,但是我们可以在ajaxfileupload.js插件中加入handleError方法。copy下面代码到ajaxfileupload.js就可以了
handleError: function( s, xhr, status, e )
// If a local callback was specified, fire it
if ( s.error ) {
s.error.call( s.context || s, xhr, status, e );
// Fire the global callback
if ( s.global ) {
(s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] );
这个问题解决了,再次重新运行代码,出现
到这里实际上就是这篇文章的重点了,打开浏览器跟了一下,就是在
jQuery(form).submit();
这里抛出了异常。
原因是这样的,IE出于安全性的考虑,上传文件时必须要点击&input type=&file&&控件本身才能上传成功。而因为&input type=&file&&长的实在太丑,很少能满足我们的审美,我们通常都是会隐藏它,然后用其他的button去触发它。而这么做在IE9下是不被允许的。
至于解决方法,如果大家坚持用更加漂亮的上传控件,那我觉得用一些css的技巧吧,把&input type=&file&&控件遮挡下什么的,这个还是要根据实际情况来定,说来比较恶心,就一个IE9,破坏了其他浏览器的和谐,真是叫人抓心挠肝。
对于之前的demo,如果把&input type=&file&&显示出来,那么相应的后台也要进行一下修改,主要还是获取文件名的部分
System.Web.HttpContext.Current.Request.Files[0].FileName
System.IO.Path.GetFileName(System.Web.HttpContext.Current.Request.Files[0].FileName))
因为此时的System.Web.HttpContext.Current.Request.Files[0].FileName是一个完整的文件路径,而不单单是一个文件名。
当然,如果我们不想把图片先save到本地的话,可以直接用图片路径去预览,但是要知道,这个只适合IE呀~~所以,大家自己斟酌。
关于这个&input type=&file&&控件在IE9下能必须要被实际点击才能上传的问题,我想一定有其他解决的办法,希望知道的朋友能够分享一下。
《ASP.NET 使用ajaxfileupload.js插件出现上传较大文件失败的解决方法(ajaxfileupload.js第一弹) 》
《jQuery 关于ajaxfileupload.js插件的逐步解析(ajaxfileupload.js第二弹) 》
《jQuery 自制上传头像插件-附带Demo实例(ajaxfileupload.js第三弹) 》
getXXX方法是从session中取参数值,从你贴出的代码来看 没有涉及到这块,所以我觉得你要是用System.out.println(&userIcon:& + getId_userIcon());
取不到任何id·个人浅见~
file选择文件的事件簿是有file文件直接触发的,这个情况我原来也遇到过:创建一个button 点击时候新增一个file控件,然后file.click()这种做法除IE以外的浏览器都没有问题,但在IE里面必须点击file文件本身才能够上传成功,安全问题大家都懂的,我就不解释了。处理方法,创建一个file直接点击file控件触发文件选择,如果觉得file长得不好看,OK
全部透明它 然后设置你想要的样式, 聪明人 你应该懂得。 附图两张:(此与后台没有关系)图片一直传不上来,要的话 我邮件发你!附:这么辛苦的敲不给分就过意不去呢!!!
相关搜索:
相关阅读:
相关频道:
&&&&&&&&&&&&&&&&&&
jQuery最近更新亲,简单的说Ajax请求通过XMLHttpRequest对象发送请求,该对象有四个状态(readyState):&
0-未初始化&
1-正在初始化&
2-发送数据&
3-正在发送数据&
当XMLHttpRequest.readyState为4时,表示请求已经完成可以得到响应结果。当然success和error方法还是根据响应状态码来触发。当XMLHttpRequest.status为200的时候,表示响应成功,此时触发success().其他状态码则触发error().&
Jquery的$.ajax()函数只是封装了ajax请求,本质上还是通过JS XMLHttpRequest内置对象来处理的。&
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:268656次
积分:2961
积分:2961
排名:第5089名
原创:16篇
转载:257篇
评论:26条
(1)(1)(2)(12)(10)(7)(6)(2)(7)(11)(1)(1)(1)(2)(1)(39)(10)(6)(6)(5)(2)(1)(1)(17)(26)(3)(2)(12)(1)(14)(4)(13)(3)(7)(30)(6)扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
使用jquery 的ajax 异步提交,该如何处理
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口

我要回帖

更多关于 jquery ajax 提交表单 的文章

 

随机推荐