@@ -57,19 +57,47 @@ $.ajax = function ravenAjaxWrapper(url, options) {
57
57
options = options || { } ;
58
58
59
59
/*jshint -W084*/
60
- while ( key = keys . pop ( ) ) {
60
+ while ( key = keys . pop ( ) ) {
61
61
if ( $ . isFunction ( options [ key ] ) ) {
62
62
options [ key ] = Raven . wrap ( options [ key ] ) ;
63
63
}
64
64
}
65
65
/*jshint +W084*/
66
66
67
67
try {
68
- return _oldAjax . call ( this , url , options ) ;
68
+ var jqXHR = _oldAjax . call ( this , url , options ) ;
69
+ // jqXHR.complete is not a regular deferred callback
70
+ if ( $ . isFunction ( jqXHR . complete ) )
71
+ jqXHR . complete = Raven . wrap ( jqXHR . complete ) ;
72
+ return jqXHR ;
69
73
} catch ( e ) {
70
74
Raven . captureException ( e ) ;
71
75
throw e ;
72
76
}
73
77
} ;
74
78
79
+ var _oldDeferred = $ . Deferred ;
80
+ $ . Deferred = function ravenDeferredWrapper ( func ) {
81
+ return ! _oldDeferred ? null : _oldDeferred ( function beforeStartWrapper ( deferred ) {
82
+ var methods = [ 'resolve' , 'reject' , 'notify' , 'resolveWith' , 'rejectWith' , 'notifyWith' ] , method ;
83
+
84
+ // since jQuery 1.9, deferred[resolve | reject | notify] are calling internally
85
+ // deferred[resolveWith | rejectWith | notifyWith] but we need to wrap them as well
86
+ // to support all previous versions.
87
+
88
+ /*jshint -W084*/
89
+ while ( method = methods . pop ( ) ) {
90
+ if ( $ . isFunction ( deferred [ method ] ) ) {
91
+ deferred [ method ] = Raven . wrap ( deferred [ method ] ) ;
92
+ }
93
+ }
94
+ /*jshint +W084*/
95
+
96
+ // Call given func if any
97
+ if ( func ) {
98
+ func . call ( deferred , deferred ) ;
99
+ }
100
+ } ) ;
101
+ } ;
102
+
75
103
} ( window , window . Raven , window . jQuery ) ) ;
0 commit comments