Ajax上传插件抛出jQuery.handleError未找到

我使用PHP Letter的ajax文件上传插件,并使用jQuery 1.6.2。文件上传正常,但我无法用户从PHP脚本返回的JSON数据,当我检查javascript错误consolse我问候这个错误,

“未捕获的TypeError:对象函数(a,b){return new e.fn.init(a,b,h)}没有方法’handleError’”

在铬和

“jQuery.handleError不是函数”

在Firefox中。

有没有人有类似的经历?

当你尝试使用最新版本的jQuery时。 handleError函数从库高,然后是V 1.5折旧。 我通过在我的ajaxfileupload.js文件中添加此函数来解决它。

handleError: function( s, xhr, status, e ) { // If a local callback was specified, fire it if ( s.error ) { s.error.call( s.context || window, xhr, status, e ); } // Fire the global callback if ( s.global ) { (s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] ); } } 

它对我来说很好。 此外,如果您尝试在同一页面上使用任何ajaxSubmit()它将无法工作,所以我使用正常的表单提交与ajxfileupload。 如果有人能以同样的方式提供帮助,请告诉我。

http://forum.phpletter.com/viewtopic.php?f=8&t=3044

现代jQuery没有jQuery.handleError(s,xml,status,e)方法。

因此,如果出现错误,文件上传器会挂起所有javascripts。

这个上传脚本小巧,优雅,漂亮。 然而,它相当古老,jQuery从那时起就完全重新设计了ajax。 下一次,我将尝试使用带有进度条和拖放支持的现代复杂脚本: http : //valums.com/ajax-upload/

否则,出于遗留代码或简单原因,您会发现ajaxfileupload.js (版本2.1)的此修复程序很有用:请注意,不支持全局“ajaxError”事件。


     jQuery.extend({


         createUploadIframe:function(id,uri)
        {
              //创建框架
                 var frameId ='jUploadFrame'+ id;
                 var iframeHtml ='';
              jQuery的(iframeHtml).appendTo(document.body的);

                 return jQuery('#'+ frameId).get(0);         
         },
         createUploadForm:function(id,fileElementId,data)
        {
           //创建表单   
           var formId ='jUploadForm'+ id;
           var fileId ='jUploadFile'+ id;
           var form = jQuery('');   
          如果(数据)
           {
              for(数据中的var i)
              {
                 jQuery的( '')appendTo(forms)。
              }         
           }      
           var oldElement = jQuery('#'+ fileElementId);
           var newElement = jQuery(oldElement).clone();
           jQuery(oldElement).attr('id',fileId);
           jQuery的(oldElement)。之前(为newElement);
           jQuery的(oldElement).appendTo(forms);



           //设置属性
           jQuery(form).css('position','absolute');
           jQuery(form).css('top',' -  1200px');
           jQuery(form).css('left',' -  1200px');
           jQuery的(forms).appendTo( '主体');      
          返回表格;
         },

         ajaxFileUpload:function(s){
             // TODO引入全局设置,允许客户端为所有请求修改它们,而不仅仅是超时      
             s = jQuery.extend({},jQuery.ajaxSettings,s);
             var id = new Date()。getTime()       
           var form = jQuery.createUploadForm(id,s.fileElementId,(typeof(s.data)=='undefined'?false:s.data));
           var io = jQuery.createUploadIframe(id,s.secureuri);
           var frameId ='jUploadFrame'+ id;
           var formId ='jUploadForm'+ id;      
             //观察一组新请求
             if(s.global &&!jQuery.active ++)
           {
              jQuery.event.trigger(“ajaxStart”);
           }           
             var requestDone = false;
             //创建请求对象
             var xml = {}   
             if(s.global)
                 jQuery.event.trigger(“ajaxSend”,[xml,s]);
             //等待回复
             var uploadCallback = function(isTimeout)
           {         
              var io = document.getElementById(frameId);
                尝试
              {            
                如果(io.contentWindow)
                 {
                     xml.responseText = io.contentWindow.document.body?io.contentWindow.document.body.innerHTML:null;
                         xml.responseXML = io.contentWindow.document.XMLDocument?io.contentWindow.document.XMLDocument:io.contentWindow.document;

                 } else if(io.contentDocument)
                 {
                     xml.responseText = io.contentDocument.document.body?io.contentDocument.document.body.innerHTML:null;
                        xml.responseXML = io.contentDocument.document.XMLDocument?io.contentDocument.document.XMLDocument:io.contentDocument.document;
                 }                  
                 }赶上(e)中
              {
                 jQuery.my_handleError(s,xml,null,e);
              }
                 if(xml || isTimeout ==“timeout”)
              {            
                     requestDone = true;
                     var状态;
                    尝试{
                         status = isTimeout!=“超时”?  “成功”:“错误”;
                         //确保请求成功或未经修改
                         if(status!=“error”)
                    {
                             //处理数据(无论回调如何,都通过httpData运行xml)
                             var data = jQuery.uploadHttpData(xml,s.dataType);   
                             //如果指定了本地回调,则触发它并将数据传递给它
                             if(s.success)
                                 s.success(数据,状态);

                             //触发全局回调
                             if(s.global)
                                 jQuery.event.trigger(“ajaxSuccess”,[xml,s]);
                        其他
                             jQuery.my_handleError(s,xml,status);
                    抓住(e)
                 {
                         status =“错误”;
                         jQuery.my_handleError(s,xml,status,e);
                     }

                     //请求已完成
                     if(s.global)
                         jQuery.event.trigger(“ajaxComplete”,[xml,s]);

                     //处理全局AJAX计数器
                     if(s.global &&! -  jQuery.active)
                         jQuery.event.trigger(“ajaxStop”);

                     //处理结果
                     if(s.complete)
                         s.complete(xml,status);

                     jQuery的(IO).unbind()

                    的setTimeout(()的函数
                                {试试
                                   {
                                      jQuery的(IO)卸下摆臂();
                                      jQuery的(forms)卸下摆臂();   

                                  抓住(e)
                                   {
                                      jQuery.my_handleError(s,xml,null,e);
                                   }                           

                                },100)

                     xml = null

                 }
             }
             //超时检查器
             if(s.timeout> 0)
           {
                的setTimeout(函数(){
                     //检查请求是否仍在发生
                     if(!requestDone)uploadCallback(“timeout”);
                 },s.timeout);
             }
            尝试
           {

              var form = jQuery('#'+ formId);
              jQuery(form).attr('action',s.url);
              jQuery(form).attr('method','POST');
              jQuery(form).attr('target',frameId);
                如果(form.encoding)
              {
                 jQuery(form).attr('encoding','multipart / form-data');               
                 }
                其他
              {   
                 jQuery(form).attr('enctype','multipart / form-data');         
                 }         
                 jQuery的(forms).submit();

            抓住(e)
           {         
                 jQuery.my_handleError(s,xml,null,e);
             }

           jQuery('#'+ frameId).load(uploadCallback);
             return {abort:function(){}};   

         },

         uploadHttpData:function(r,type){
             var data =!type;
             data = type ==“xml”|| 数据?  r.responseXML:r.responseText;
             //如果类型是“script”,请在全局上下文中对其进行评估
             if(type ==“script”)
                 jQuery.globalEval(data);
             //如果使用JSON,则获取JavaScript对象。
             if(type ==“json”)
                 eval(“data =”+ data);
             //评估html中的脚本
             if(type ==“html”)
                 jQuery的( “”)的html(数据).evalScripts();
              // alert($('param',data).each(function(){alert($(this).attr('value'));}));;
            返回数据;
         },

         / * jQuery 1.2函数替换:* /
         my_handleError:function(s,xhr,status,e){
           //如果指定了本地回调,则触发它
           if(s.error)s.error(xhr,status,e);

           //触发全局回调
                     / *不兼容!!! 现代jQuery 1.5+期望xhr成为jqXHR对象。
           if(s.global)
              jQuery.event.trigger(“ajaxError”,[xhr,s,e]);
                             * /
        }
     })

我也使用这个插件,新版本的jQuery有一些不兼容性。 我在我的项目中使用jquery-1.9.1.js。

该插件与jquery-1.2.1.js一起使用。

我在中文网站上找到了一个解决方案: http : //chen-h.iteye.com/blog/1769457我测试了这个版本,但它确实有效。 回调现在没问题。

我不会说中文,但我想开发人员已经为新版本的Jquery转换了这个插件。

 jQuery.extend({ 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] ); } }, createUploadIframe: function(id, uri) { var frameId = 'jUploadFrame' + id; if(window.ActiveXObject) { if(jQuery.browser.version=="9.0") { io = document.createElement('iframe'); io.id = frameId; io.name = frameId; } else if(jQuery.browser.version=="6.0" || jQuery.browser.version=="7.0" || jQuery.browser.version=="8.0") { var io = document.createElement(''); if(typeof uri== 'boolean'){ io.src = 'javascript:false'; } else if(typeof uri== 'string'){ io.src = uri; } } } else { var io = document.createElement('iframe'); io.id = frameId; io.name = frameId; } io.style.position = 'absolute'; io.style.top = '-1000px'; io.style.left = '-1000px'; document.body.appendChild(io); return io; }, ajaxUpload:function(s,xml){ //if((fromFiles.nodeType&&!((fileList=fromFiles.files)&&fileList[0].name))) var uid = new Date().getTime(),idIO='jUploadFrame'+uid,_this=this; var jIO=$(' 

该示例使用jQuery 1.2.1;

http://www.phpletter.com/javascript/jquery.js

一段时间后, jQuery.handleError()被删除了,我不知道什么时候。

您需要使用较旧的jQuery版本,自己更新脚本或尝试查找最新的脚本。 试试http://valums.com/ajax-upload/或搜索一些但只记得检查他们的上次更新日期!

我找到了一个类似的插件并对其进行了修改以满足我的需求,这要归功于有关删除$ .handleError()的问题。

本文很好地应用了AJAX上传,并解释了它的codeigniter。 它对我有用,除了我必须更换

dataType:’json’

通过

dataType:’html’

似乎与json存在一些问题

也相对url对我不起作用所以我把一个绝对的url。

  url :'http://localhost/satyam/LifeBook/places/upload_file', 

而且不要忘记你需要在ajaxupload.js文件中写入handlError函数到最后。 http://www.kovloq.com/2011/10/23/ajax-upload-using-codeigniter/