2011-10-23 10 views
4

jqueryスクリプトがあります。私のファイルに応答を送る必要があります。すべてがうまくいくと成功しますが、間違っているとエラー機能が必要になります。jQuery.handleError is not a function jQuery.handleError(s, xml, status, e);handleErrorを変更するにはどうすればよいですか?

このhandleErrorを他の関数に変更するにはどうすればよいですか?または私は何ができますか?

jQuery.extend({ 

createUploadIframe: function(id, uri) 
{ 
     //create frame 
     var frameId = 'jUploadFrame' + id; 
     var iframeHtml = '<iframe id="' + frameId + '" name="' + frameId + '" style="position:absolute; top:-9999px; left:-9999px"'; 
     if(window.ActiveXObject) 
     { 
      if(typeof uri== 'boolean'){ 
       iframeHtml += ' src="' + 'javascript:false' + '"'; 

      } 
      else if(typeof uri== 'string'){ 
       iframeHtml += ' src="' + uri + '"'; 

      } 
     } 
     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('<form action="" 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   
    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.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.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 
      if (s.complete) 
       s.complete(xml, status); 

      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); 
    // evaluate scripts within html 
    if (type == "html") 
     jQuery("<div>").html(data).evalScripts(); 

    return data; 
} 
}) 

答えて

4

handleErrorは、jquery 1.5以降では使用されなくなりました。私は使用しているプラ​​グインをこのプラグインに切り替えました:http://www.jainaewen.com/files/javascript/jquery/iframe-post-form.html

これはずっと簡単で、あなたの特定のフォームにプラグインを変更するのは簡単です。あなたはこの記事のように、独自のhandleError関数を記述しようとすることができ

が示唆:When was handleError removed from jQuery?

1

どのバージョンのjQueryを使用していますか?複数のプラグインには、直面しているような問題があるようです。たとえば、this threadを参照してください。

場合によっては、jQueryとプラグインの両方の最新バージョンに更新することができます。

いずれにしても動作しません。以前のバージョンのjQueryを組み込むとどうなりますか?問題は解決しますか?原因は、問題はあなたのスクリプトにではなく、プラグイン自体の中にあることを意味します。

+0

問題ないはずです確認してください

$.ajaxFileUpload({ dataType : 'JSON', 

:それは(AjaxFileUpload SyntaxError: missing } in XML expressionクレジットがここにshwetankaに行く)データ型はJSONとして資産計上する必要が判明しますうまくいきますが、v1.5.1ではエラーが表示されます。私はこのhttp://www.phpletter.com/Our-Projects/AjaxFileUpload/プラグインを使用していますが、私はそれがもう開発中ではないと考えています。多分あなたはこのような同様のプラグインを知っていますか? – Gintas

+0

@jkの答えを見てみることをお勧めします。それはあなたのためのトリックをすることができます。 –

1

をajaxFileUploadを統合するとき、私はあまりにもこの問題を抱えていた、私はコンソールにエラーをログに記録し、それをグーグルで私の答えに出くわし:

   //status = "error"; 
       // jQuery.handleError(s, xml, status, e); 
       console.log(s); 
       console.log(xml); 
       console.log(status); 
       console.log(e); 

エラーが発生したとき、コールの構文が間違っていることがわかりました。サーバはJSONに戻って応答をエンコードしている、あなたはjQueryの1.2.1で

関連する問題