Skip to content

Commit 7e183a1

Browse files
author
Mathieu Ghaleb
committed
- handle 'complete' callback from $.ajax
- wrap deferred[resolve | reject | promise] for pre-1.9
1 parent f17dadc commit 7e183a1

File tree

1 file changed

+21
-8
lines changed

1 file changed

+21
-8
lines changed

plugins/jquery.js

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -57,15 +57,19 @@ $.ajax = function ravenAjaxWrapper(url, options) {
5757
options = options || {};
5858

5959
/*jshint -W084*/
60-
while(key = keys.pop()) {
60+
while (key = keys.pop()) {
6161
if ($.isFunction(options[key])) {
6262
options[key] = Raven.wrap(options[key]);
6363
}
6464
}
6565
/*jshint +W084*/
6666

6767
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;
6973
} catch (e) {
7074
Raven.captureException(e);
7175
throw e;
@@ -74,12 +78,21 @@ $.ajax = function ravenAjaxWrapper(url, options) {
7478

7579
var _oldDeferred = $.Deferred;
7680
$.Deferred = function ravenDeferredWrapper(func) {
77-
return _oldDeferred(function beforeStartWrapper(deferred) {
78-
// no need to wrap deferred[ resolve | reject | notify ]
79-
// as they are calling deferred[ resolveWith | rejectWith | notifyWith ] internally.
80-
deferred.resolveWith = Raven.wrap(deferred.resolveWith);
81-
deferred.rejectWith = Raven.wrap(deferred.rejectWith);
82-
deferred.notifyWith = Raven.wrap(deferred.notifyWith);
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+
8396
// Call given func if any
8497
if (func) {
8598
func.call(deferred, deferred);

0 commit comments

Comments
 (0)