@@ -42,9 +42,25 @@ $.fn.ready = function ravenjQueryReadyWrapper(fn) {
42
42
return _oldReady . call ( this , Raven . wrap ( fn ) ) ;
43
43
} ;
44
44
45
+ function wrapFunctionProperties ( obj , keys ) {
46
+ var key , i ;
47
+ for ( i = 0 ; i < keys . length ; i ++ ) {
48
+ key = keys [ i ] ;
49
+ if ( $ . isFunction ( obj [ key ] ) ) {
50
+ obj [ key ] = Raven . wrap ( obj [ key ] ) ;
51
+ }
52
+ }
53
+ }
54
+
45
55
var _oldAjax = $ . ajax ;
46
56
$ . ajax = function ravenAjaxWrapper ( url , options ) {
47
- var keys = [ 'complete' , 'error' , 'success' ] , key ;
57
+ var optionsCallbacks = [ 'complete' , 'error' , 'success' ] ,
58
+ promiseCallbacks = [
59
+ 'done' , 'fail' , 'always' , 'then' , // documented
60
+ 'success' , 'error' , 'complete' // deprecated
61
+ ] ,
62
+ jqxhr ;
63
+
48
64
49
65
// Taken from https://github.com/jquery/jquery/blob/eee2eaf1d7a189d99106423a4206c224ebd5b848/src/ajax.js#L311-L318
50
66
// If url is an object, simulate pre-1.5 signature
@@ -56,16 +72,14 @@ $.ajax = function ravenAjaxWrapper(url, options) {
56
72
// Force options to be an object
57
73
options = options || { } ;
58
74
59
- /*jshint -W084*/
60
- while ( key = keys . pop ( ) ) {
61
- if ( $ . isFunction ( options [ key ] ) ) {
62
- options [ key ] = Raven . wrap ( options [ key ] ) ;
63
- }
64
- }
65
- /*jshint +W084*/
75
+ wrapFunctionProperties ( options , optionsCallbacks ) ;
66
76
77
+
78
+ /*jshint +W084*/
67
79
try {
68
- return _oldAjax . call ( this , url , options ) ;
80
+ jqxhr = _oldAjax . call ( this , url , options ) ;
81
+ wrapFunctionProperties ( jqxhr , promiseCallbacks ) ;
82
+ return jqxhr ;
69
83
} catch ( e ) {
70
84
Raven . captureException ( e ) ;
71
85
throw e ;
0 commit comments