ajaxFileUpload 报这错jQuery.handleError is not a function 博客分类: WEB前端jquery

时间:2023-05-20 13:50:32

今天刚打个一个技术群,里面有人问标题上的问题,嘿,我恰好遇过,现在大家至少也在用jquery1.9以上的版本,ajaxfileupload的版本早就不更新了,大家可以下载看:地址这里, 它例子里使用的Jquery是1.2的,好老呀。。。这个问题,我以前开发过程中遇过,网上说经测试(我是没测试),是版本1.4.2之前的版本才有 handlerError方法,之后就不存在了,(你存在,我深深的脑海里。。。),为了能够继续使用ajaxfileupload上传我们的附件,只好 将代码拷进我们的项目中的ajaxfileupload.js文件中,如下:

  1. handleError: function( s, xhr, status, e )      {
  2. // If a local callback was specified, fire it
  3. if ( s.error ) {
  4. s.error.call( s.context || s, xhr, status, e );
  5. }
  6. // Fire the global callback
  7. if ( s.global ) {
  8. (s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] );
  9. }
  10. }

这样,就可以用了

在做ajaxFileUpload时,我也遇到这个问题,同时还有其它的问题,用了一下午的时间解决了:
问题1:如楼主所说,jQuery.handleError is not a function 原因是,经测试handlerError只在jquery-1.4.2之前的版本中存在,jquery-1.6 和1.7中都没有这个函数了,因此在1.4.2中将这个函数复制到了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] );
}
},
问题2:一直得到error ,无法执行指定的success方法。通过追踪ajaxFileUpload的执行过程发现,在调用它自身的uploadHttpData函数时,当执行if(type=="json") eval("data = "+data);
会抛出异常,导致在处理异常的时候将status = "error" 因此一直执行error方法。
上网查询,得知eval函数是用来执行一段js代码,而并不是如我所想的反解json串
eval("data = "+data);的意思是 将data 赋值给 data参数 ,但是当我返回给页面的是一个简单的字符串,比如"OK" ,时,这样写就抛出异常。最后改为 eval("data = \" "+data+" \" ");即将返回的数据用双引号引起来当作字符串,然后赋给 data 。终于成功了。。。
贴出来,希望可以帮助到其他同样遇到这个问题的人。