2010-04-08 25 views
5

Prototip sürümünü kullanma 1.6.0.2.Prototip geri çağırma işlevleri yutulma istisnaları

Genellikle bir geri arama işlevine atıldığında istisnaların yutulduğu, genellikle bir Ajax.Request aramasına yanıt vermeye çalıştığımda yaygın bir sorun yaşıyorum.

HTML biçimlendirme:

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

JavaScript: İşte basit bir örnek

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."); 
}; 

Tamam, sorun, kundakçı ile Firefox'ta bu kodu çalıştırırsanız istisna çıkışı olacağıdır rahatsız edici çizgi için - yutuldu. Yudum. Bunları yakalamayı bildiğim tek yolu (hata ayıklama yapsam), geri çağırma işlevinin içeriğini bir deneme/yakalamada sarmaktır. Örneğin:

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); 
    } 
}; 

Bu sorunla karşılaşan başka biri var mı? Orada iş var mı?

Şimdiden teşekkürler! Bugün itibariyle

cevap

4

, bu bilinen davranışı:

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

Bir işle: Bir geliştirme buradaki yuttu özel başa için bir bilet

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

yoktur önerilen kod aşağıdaki kod eklemek (teşekkürler Glenn Maynard!):

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

Daha kalıcı bir çözüm uygulanana kadar aynı konudaki diğer kişilere yardımcı olmasını umuyorum.

+0

Alıntı yaptığınız kodun, sadece Ajax olayları için çalıştığını düşünüyorum. –

+0

Bu 'çözümdür! Yukarıda gösterildiği gibi Ajax.Responders -> onException yöntemini uygulamanız gerekir. –

+0

Bu mükemmel, tüm kaynaklarla güzelce döşediğiniz için teşekkürler – febs

İlgili konular