Ajax выгружает плагин jQuery.handleError не найден

Я использую плагин для загрузки файла ajax из PHP Letter и использую jQuery 1.6.2. Файлы загружаются должным образом, но я не могу использовать данные JSON, возвращаемые из скрипта php, когда я проверю ошибку javascript, я приветствую эту ошибку ,

"Uncaught 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 () на той же странице, это не сработает, поэтому я использую обычную форму submit с 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 ('');   
           если (данные)
           {
              для (var i в данных)
              {
                 JQuery ( '') appendTo (форма).
              }         
           }      
           var oldElement = jQuery ('#' + fileElementId);
           var newElement = jQuery (oldElement) .clone ();
           jQuery (oldElement) .attr ('id', fileId);
           JQuery (oldElement) .before (newElement);
           JQuery (oldElement) .appendTo (форма);



           // установить атрибуты
           jQuery (form) .css ('position', 'absolute');
           jQuery (form) .css ('top', '-1200px');
           jQuery (form) .css ('left', '-1200px');
           JQuery (форма) .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;
                 }                  
                 } Поймать (е)
              {
                 jQuery.my_handleError (s, xml, null, e);
              }
                 if (xml || isTimeout == "timeout")
              {            
                     requestDone = true;
                     статус var;
                     пытаться {
                         status = isTimeout! = "timeout"?  «успех»: «ошибка»;
                         // Удостоверьтесь, что запрос был успешным или немодифицированным
                         if (status! = "error")
                    {
                             // обрабатывать данные (запускает xml через httpData независимо от обратного вызова)
                             var data = jQuery.uploadHttpData (xml, s.dataType);   
                             // Если был задан локальный обратный вызов, запустите его и передайте ему данные
                             если (s.success)
                                 s.success (данные, статус);

                             // Пожар глобального обратного вызова
                             if (s.global)
                                 jQuery.event.trigger ("ajaxSuccess", [xml, s]);
                         } else
                             jQuery.my_handleError (s, xml, status);
                     } catch (e)
                 {
                         status = "error";
                         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, статус);

                     JQuery (ИО) .unbind ()

                     SetTimeout (функция ()
                                { пытаться
                                   {
                                      JQuery (ИО) .remove ();
                                      JQuery (форма) .remove ();   

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

                                }, 100)

                     xml = null

                 }
             }
             // Тайм-аут
             if (s.timeout> 0)
           {
                 SetTimeout (функция () {
                     // Проверяем, продолжает ли запрос
                     if (! requestDone) uploadCallback («таймаут»);
                 }, 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 (форма) .submit ();

             } catch (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;
             // Если тип «скрипт», eval его в глобальном контексте
             if (type == "script")
                 jQuery.globalEval (данные);
             // Получить объект JavaScript, если используется JSON.
             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('<iframe id="' + frameId + '" name="' + frameId + '" />'); 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=$('<iframe name="'+idIO+'" id="'+idIO+'" style="display:none">').appendTo('body'); var jForm=$('<form action="'+s.url+'" target="'+idIO+'" method="post" enctype="multipart/form-data"></form>').appendTo('body'); var oldElement = $('#'+s.fileElementId); var newElement = $(oldElement).clone(); $(oldElement).attr('id', 'jUploadFile'+uid); $(oldElement).before(newElement); $(oldElement).appendTo(jForm); this.remove=function() { if(_this!==null) { jNewFile.before(jOldFile).remove(); jIO.remove();jForm.remove(); _this=null; } } this.onLoad=function(){ var data=$(jIO[0].contentWindow.document.body).text(); try{ if(data!=undefined){ data = eval('(' + data + ')'); try { if (s.success) s.success(data, status); // Fire the global callback if(s.global) jQuery.event.trigger("ajaxSuccess", [xml, s]); if (s.complete) s.complete(data, status); xml = null; } catch(e) { status = "error"; jQuery.handleError(s, xml, status, e); } // The request was completed if(s.global) jQuery.event.trigger( "ajaxComplete", [xml, s] ); // Handle the global AJAX counter if (s.global && ! --jQuery.active ) jQuery.event.trigger("ajaxStop"); // Process result } }catch(ex){ alert(ex.message); }; } this.start=function(){jForm.submit();jIO.load(_this.onLoad);}; return this; }, createUploadForm: function(id, url,fileElementId, data) { //create form var formId = 'jUploadForm' + id; var fileId = 'jUploadFile' + id; var form = jQuery('<form action="'+url+'" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>'); if(data) { for(var i in data) { jQuery('<input type="hidden" name="' + i + '" value="' + data[i] + '" />').appendTo(form); } } var oldElement = jQuery('#' + fileElementId); var newElement = jQuery(oldElement).clone(); jQuery(oldElement).attr('id', fileId); jQuery(oldElement).before(newElement); jQuery(oldElement).appendTo(form); //set attributes jQuery(form).css('position', 'absolute'); jQuery(form).css('top', '-1200px'); jQuery(form).css('left', '-1200px'); jQuery(form).appendTo('body'); return form; }, ajaxFileUpload: function(s) { // TODO introduce global settings, allowing the client to modify them for all requests, not only timeout // Create the request object var xml = {}; s = jQuery.extend({}, jQuery.ajaxSettings, s); if(window.ActiveXObject){ var upload = new jQuery.ajaxUpload(s,xml); upload.start(); }else{ var id = new Date().getTime(); var form = jQuery.createUploadForm(id,s.url, s.fileElementId, (typeof(s.data)=='undefined'?false:s.data)); var io = jQuery.createUploadIframe(id, s.secureuri); var frameId = 'jUploadFrame' + id; var formId = 'jUploadForm' + id; // Watch for a new set of requests if ( s.global && ! jQuery.active++ ) { jQuery.event.trigger( "ajaxStart" ); } var requestDone = false; if ( s.global ) jQuery.event.trigger("ajaxSend", [xml, s]); // Wait for a response to come back var uploadCallback = function(isTimeout) { var io = document.getElementById(frameId); try { if(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; } }catch(e) { jQuery.handleError(s, xml, null, e); } if ( xml || isTimeout == "timeout") { requestDone = true; var status; try { status = isTimeout != "timeout" ? "success" : "error"; // Make sure that the request was successful or notmodified if ( status != "error" ) { // process the data (runs the xml through httpData regardless of callback) var data = jQuery.uploadHttpData(xml, s.dataType); // If a local callback was specified, fire it and pass it the data if (s.success) s.success(data, status); // Fire the global callback if(s.global) jQuery.event.trigger("ajaxSuccess", [xml, s]); if (s.complete) s.complete(data, status); } else jQuery.handleError(s, xml, status); } catch(e) { status = "error"; jQuery.handleError(s, xml, status, e); } // The request was completed if(s.global) jQuery.event.trigger( "ajaxComplete", [xml, s] ); // Handle the global AJAX counter if (s.global && ! --jQuery.active ) jQuery.event.trigger("ajaxStop"); // Process result jQuery(io).unbind(); setTimeout(function() { try { jQuery(io).remove(); jQuery(form).remove(); } catch(e) { jQuery.handleError(s, xml, null, e); } }, 100); xml = null; } }; // Timeout checker if (s.timeout>0) { setTimeout(function(){ // Check to see if the request is still happening if( !requestDone ) uploadCallback("timeout"); }, s.timeout); } try { var form = jQuery('#' + formId); jQuery(form).attr('action', s.url); jQuery(form).attr('method', 'POST'); jQuery(form).attr('target', frameId); if(form.encoding) { jQuery(form).attr('encoding', 'multipart/form-data'); } else { jQuery(form).attr('enctype', 'multipart/form-data'); } jQuery(form).submit(); } catch(e) { jQuery.handleError(s, xml, null, e); } jQuery('#'+ frameId).load(uploadCallback); return {abort: function () {}}; } }, uploadHttpData: function( r, type ) { var data = !type; data = type == "xml" || data ? r.responseXML : r.responseText; // If the type is "script", eval it in global context if ( type == "script" ) jQuery.globalEval( data ); // Get the JavaScript object, if JSON is used. if ( type == "json" ){ eval( "data = " + $(data).html() ); } // evaluate scripts within html if ( type == "html" ) jQuery("<div>").html(data).evalScripts(); return data; } }); 

В примере используется jQuery 1.2.1;

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

jQuery.handleError() был удален некоторое время назад, я не уверен, когда.

Вам нужно использовать более старую версию jQuery, самостоятельно обновить сценарий или попытаться найти обновленный скрипт. Попробуйте http://valums.com/ajax-upload/ или найдите несколько, но не забудьте проверить их дату последнего обновления!

Я нашел подобный плагин и модифицировал его, чтобы он соответствовал моим потребностям, спасибо за то, что вы решили удалить $ .handleError ()

В этой статье хорошо используется приложение AJAX Upload и объясняется, хотя оно для codeigniter. Это работало для меня, за исключением того, что мне пришлось заменить

dataType: 'json'

от

dataType: 'html'

похоже, есть проблема с json

также относительный url не работал для меня, поэтому я поставил абсолютный URL-адрес.

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

а не toeget obviosly вам нужно написать функцию handlError в файле ajaxupload.js до конца. http://www.kovloq.com/2011/10/23/ajax-upload-using-codeigniter/