2011-12-24 19 views
18

PHP Letter से AJAX फ़ाइल अपलोड प्लगइन का उपयोग कर रहा हूं और jQuery 1.6.2 का उपयोग कर रहा हूं। फ़ाइलें ठीक से अपलोड होती हैं, लेकिन मैं php स्क्रिप्ट से जेएसओएन डेटा वापस करने में असमर्थ हूं, जब मैं जावास्क्रिप्ट त्रुटि जाँच consolse मैं इस त्रुटि के साथ स्वागत कर रहा हूँ,AJAX अपलोड प्लगइन फेंक रहा है jQuery.handleError नहीं मिला

"Uncaught TypeError: Object function (a,b){return new e.fn.init(a,b,h)} has no method 'handleError'"

क्रोम में

और

"jQuery.handleError is not a function"

फ़ायरफ़ॉक्स में

क्या किसी के पास ऐसा ही अनुभव है?

उत्तर

46

यह तब था जब आप jQuery के नवीनतम संस्करण के साथ इसका उपयोग करने का प्रयास कर रहे थे। हैंडलर फ़ंक्शन लाइब्रेरी ऊपरी और वी 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() का उपयोग करने का प्रयास करते हैं तो यह काम नहीं करेगा, इसलिए मैं सामान्य फॉर्म का उपयोग AJAXfileupload से सबमिट करता हूं। अगर कोई भी उसी तरह मदद कर सकता है तो कृपया मुझे बताएं।

+0

मैंने आपका कोड जोड़ा लेकिन मुझे अभी भी एक ही त्रुटि मिलती है – Uahmed

+1

कोड जोड़ने के दौरान आप कुछ गलत कर रहे हैं। –

+2

हाँ गोविंद आप सही हैं मैं गायब था "," हैंडलर से पहले, माफ करना, मैं इसके लिए नया हूं :) धन्यवाद यह – Uahmed

1

उदाहरण jQuery 1.2.1 का उपयोग करता है;

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

jQuery.handleError() एक समय पहले हटा दिया गया था, मुझे यकीन है कि जब नहीं हूँ।

आपको पुराने jQuery संस्करण का उपयोग करने की आवश्यकता है, स्क्रिप्ट को स्वयं अपडेट करें या एक अद्यतित स्क्रिप्ट ढूंढने का प्रयास करें। http://valums.com/ajax-upload/ आज़माएं या कुछ के लिए खोज करें लेकिन बस अपनी आखिरी अपडेट तिथि जांचना याद रखें!

3

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

आधुनिक jQuery के jQuery की जरूरत नहीं है के बारे में एक समान प्लगइन मिल गया है और यह modded मेरी जरूरतों फिट करने के लिए, सिर के लिए धन्यवाद। हैंडलर (एस, एक्सएमएल, स्थिति, ई) विधि।

इसलिए, किसी त्रुटि के मामले में, फ़ाइल अपलोडर सभी जावास्क्रिप्ट को लटकता है।

यह अपलोडर स्क्रिप्ट छोटा, सुरुचिपूर्ण और अच्छा है। हालांकि, यह पुराना है और jQuery ने तब से अजाक्स को पूरी तरह से फिर से डिजाइन किया है। अगली बार, मैं एक प्रगति बार और खींचें और ड्रॉप समर्थन के साथ एक आधुनिक जटिल स्क्रिप्ट का उपयोग करने की कोशिश करेंगे: विरासत कोड या सादगी कारणों के लिए, http://valums.com/ajax-upload/

अन्यथा, आप ajaxfileupload.js का यह सुधार मिल जाएगा (संस्करण 2.1) उपयोगी: ध्यान दें कि वैश्विक "AJAXError" ईवेंट समर्थित नहीं है।

 

    jQuery.extend({ 


     createUploadIframe: function(id, uri) 
     { 
      //create frame 
       var frameId = 'jUploadFrame' + id; 
       var iframeHtml = ''; 
      jQuery(iframeHtml).appendTo(document.body); 

       return jQuery('#' + frameId).get(0);   
     }, 
     createUploadForm: function(id, fileElementId, data) 
     { 
      //create form 
      var formId = 'jUploadForm' + id; 
      var fileId = 'jUploadFile' + id; 
      var form = jQuery(''); 
      if(data) 
      { 
      for(var i in data) 
      { 
       jQuery('').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  
      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;  
      // Watch for a new set of requests 
      if (s.global && ! jQuery.active++) 
      { 
      jQuery.event.trigger("ajaxStart"); 
      }   
      var requestDone = false; 
      // Create the request object 
      var xml = {} 
      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.my_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]); 
         } else 
          jQuery.my_handleError(s, xml, status); 
        } catch(e) 
       { 
         status = "error"; 
         jQuery.my_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 
        if (s.complete) 
         s.complete(xml, status); 

        jQuery(io).unbind() 

        setTimeout(function() 
           { try 
            { 
            jQuery(io).remove(); 
            jQuery(form).remove(); 

            } catch(e) 
            { 
            jQuery.my_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.my_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); 
      // evaluate scripts within html 
      if (type == "html") 
       jQuery("").html(data).evalScripts(); 
      //alert($('param', data).each(function(){alert($(this).attr('value'));})); 
      return data; 
     }, 

     /* jQuery 1.2 function substitution: */ 
     my_handleError: function(s, xhr, status, e) { 
      // If a local callback was specified, fire it 
      if (s.error) s.error(xhr, status, e); 

      // Fire the global callback 
        /* INCOMPATIBLE!!! Modern jQuery 1.5+ expects xhr to be an jqXHR object. 
      if (s.global) 
      jQuery.event.trigger("ajaxError", [xhr, s, e]); 
          */ 
     } 
    }) 

0

यह आलेख AJAX अपलोड को अच्छी तरह से लागू करता है और यह बताता है कि यह कोडनिर्देशक के लिए है।यह सिवाय मेरे लिए काम किया है कि मैं

डेटाप्रकार को बदलने के लिए किया था: द्वारा

डेटाप्रकार 'json'

: 'एचटीएमएल'

लगता json के साथ कुछ मुद्दे

भी रिश्तेदार है यूआरएल मेरे लिए काम नहीं करता है इसलिए मैंने एक पूर्ण यूआरएल रखा।

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

और नहीं obviosly foreget करने के लिए आप को समाप्त करने के ajaxupload.js फ़ाइल में handlError समारोह लिखने के लिए की जरूरत है। http://www.kovloq.com/2011/10/23/ajax-upload-using-codeigniter/

2

मैं इस प्लगइन का भी उपयोग करता हूं और 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; 
} 
}); 
संबंधित मुद्दे