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/