2010-04-08 9 views
5

प्रोटोटाइप संस्करण 1.6.0.2 का उपयोग करना।प्रोटोटाइप कॉलबैक फ़ंक्शन अपवादों को निगलने

मुझे एक आम समस्या है जहां कॉलबैक फ़ंक्शन में फेंकने पर अपवादों को निगल लिया जा रहा है, आमतौर पर जब मैं Ajax.Request कॉल पर प्रतिक्रिया को संभालने का प्रयास कर रहा हूं।

HTML मार्कअप:

<input type="button" id="myButton" value="Press Me" /> 

जावास्क्रिप्ट: यहाँ एक सरल उदाहरण है

MYSITE = {}; 

document.observe("dom:loaded", function() { 

    // Set up our helper object 
    MYSITE.pageHelper = new MYSITE.PageHelper(); 

}); 


MYSITE.PageHelper = function() { 

    console.log("PageHelper called."); 

    $("myButton").observe("click", this.makeCall.bindAsEventListener(this)); 

}; 

MYSITE.PageHelper.prototype.makeCall = function() { 

    console.log("Make call."); 

    new Ajax.Request(
      "remoteCall.cfm", 
      { 
       method: 'get', 
       parameters: "", 
       onComplete: this.handleCallback.bindAsEventListener(this) 

      }); 


}; 

MYSITE.PageHelper.prototype.handleCallback = function(resp) { 

    console.log("Start callback processing..."); 

    var x = missingVar + "text"; // This line generates an exception... 

    console.log("Finished callback processing."); 
}; 

ठीक है, तो मुद्दा यह है कि अगर आप Firebug के साथ फ़ायरफ़ॉक्स में इस कोड को चलाने के कोई अपवाद नहीं उत्पादन होगा अपमानजनक रेखा के लिए - यह निगल लिया गया है। Gulp। इन्हें पकड़ने का एकमात्र तरीका है (कहें कि मैं डिबगिंग कर रहा हूं) कॉलबैक फ़ंक्शन की सामग्री को एक प्रयास/पकड़ में लपेटना है। उदाहरण के लिए:

MYSITE.PageHelper.prototype.handleCallback = function(resp) { 

    try { 

     console.log("Start callback processing..."); 

     var x = missingVar + "text"; // This line generates an exception... 

     console.log("Finished callback processing."); 

    } catch (e) { 
     console.log(e); 
    } 
}; 

क्या कोई और इस मुद्दे पर कभी आया है? वहाँ कोई काम-आसपास है?

अग्रिम धन्यवाद!

उत्तर

4

आज के रूप में, यह जाना जाता है व्यवहार:

https://prototype.lighthouseapp.com/projects/8886/tickets/634-no-exception-on-error-in-oncreate-method-of-ajaxrequest

एक काम:

http://groups.google.com/group/prototype-scriptaculous/browse_thread/thread/e71c7a6bfb656380/7d1c8a23edc07f03?lnk=gst&q=exception+swallowed#

बढ़ा हुआ ये निगल लिया अपवाद यहाँ से निपटने के लिए के लिए में एक टिकट भी नहीं है सुझाव दिया गया है कि निम्नलिखित कोड जोड़ना है (धन्यवाद ग्लेन मेनार्ड!):

Ajax.Responders.register({ 
     onException: function(request, exception) { 
       (function() { throw exception; }).defer(); 
     } 
}); 

आशा है कि एक और समस्या के साथ दूसरों को एक ही समस्या के साथ मदद मिलेगी जब तक कि एक स्थायी समाधान लागू नहीं किया जाता है।

+0

मुझे लगता है कि आपके द्वारा उद्धृत कोड केवल अजाक्स घटनाओं के लिए काम करता है, न कि सरल ऑनक्लिक प्रकार की घटनाओं के लिए, जिन पर सवाल पूछा गया है। –

+0

यह 'समाधान' है! आपको अजाक्स को लागू करना चाहिए। रेस्पॉन्डर -> उपरोक्त वर्णित अपवाद विधि पर। –

+0

यह उत्कृष्ट है, सभी स्रोतों के साथ इसे अच्छी तरह से रखने के लिए धन्यवाद – febs

संबंधित मुद्दे