吞噬了jQuery AJAX回调中引发的exception?
除了在每个回调中添加try..catch块之外,有没有办法处理jQuery中从AJAX回调抛出的exception? 在这种情况下不会调用错误函数。
$.ajax( { url: 'myurl.rails', success: function( data ) { throw 'Oh no!'; }, error: function ( xhr, textStatus, errorThrown ) { console.log( 'AJAX call failed', xhr, textStatus, errorThrown ); } } );
如果你看一下jQuery 1.4.2的非缩小版本,相关的行是5264到5274:
function success() { // If a local callback was specified, fire it and pass it the data if ( s.success ) { s.success.call( callbackContext, data, status, xhr ); } // Fire the global callback if ( s.global ) { trigger( "ajaxSuccess", [xhr, s] ); } }
jQuery只调用应用于设置对象的success
函数(如果它存在),而不关心函数返回或抛出的内容。
你可以做的是使用jQuery.ajaxSetup()
如下所示:
jQuery.ajaxSetup({ success: function() { try { if ( this.mysuccess ) { this.mysuccess.apply( this, arguments ); } } catch(err) { // whatever } } });
并使用mysuccess
(或任何你喜欢的称之为)而不是单独的jQuery.ajax
调用success
。
error
回调旨在在请求本身出现问题时使用。 根据文件:
请求失败时要调用的函数。 该函数传递三个参数:XMLHttpRequest对象,描述发生的错误类型的字符串和可选的exception对象(如果发生)。 第二个参数的可能值(除了null)是“timeout”,“error”,“notmodified”和“parsererror”。
因此,如果您回来的数据存在问题,那么您应该在success
回调中处理它 – 可能通过将其记录到控制台或通知用户。
你有没有研究过jQuery的任何全局AJAX特性,比如ajaxSetup和ajaxError ?