このコードスニペットは成功/エラーコールバックと約束スタイルコールバックの両方で1.7.2で動作しました。 1.8.2では、成功/エラーコールバックは引き続き機能しますが、約束は効きません。私の感想は、return dfd.promise(jqXHR);
行が問題だが確かではないということだ。私の約束はもはやjQuery 1.8で働いていません
$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
// Don't infinitely recurse
originalOptions._retry = isNaN(originalOptions._retry)
? Common.auth.maxExpiredAuthorizationRetries
: originalOptions._retry - 1;
// set up to date authorization header with every request
jqXHR.setRequestHeader("Authorization", Common.auth.getAuthorizationHeader());
// save the original error callback for later
if (originalOptions.error)
originalOptions._error = originalOptions.error;
// overwrite *current request* error callback
options.error = $.noop();
// setup our own deferred object to also support promises that are only invoked
// once all of the retry attempts have been exhausted
var dfd = $.Deferred();
jqXHR.done(dfd.resolve);
// if the request fails, do something else yet still resolve
jqXHR.fail(function() {
var args = Array.prototype.slice.call(arguments);
if (jqXHR.status === 401 && originalOptions._retry > 0) {
// refresh the oauth credentials for the next attempt(s)
// (will be stored and returned by Common.auth.getAuthorizationHeader())
Common.auth.handleUnauthorized();
// retry with our modified
$.ajax(originalOptions).then(dfd.resolve, dfd.reject);
} else {
// add our _error callback to our promise object
if (originalOptions._error)
dfd.fail(originalOptions._error);
dfd.rejectWith(jqXHR, args);
}
});
// NOW override the jqXHR's promise functions with our deferred
return dfd.promise(jqXHR);
});
更新:
$.ajax({
url: someFunctionToGetUrl(),
// works
//success: callback,
//error: ajaxErrorHandler
}).then(
[callback],
[errorback, ajaxErrorHandler]
);
};
リクエストは同期していますか?もしそうなら、 'jqXHR'では動作しません。 docsから: "jQuery 1.8では、jqXHR($ .Deferred)でasync:falseを使用することは推奨されていません。完全/成功/エラーコールバックを使用する必要があります。 – bfavaretto
いいえ、私のAjaxリクエストを投稿に追加しました – ryan
あなたはChromeデバッガーをよく知っていますか? >。< あなたの投稿には以下の人が答えられます:全く同じ事をしている(または研究している) 2は忍耐を持っており、調査するための例を設定します。だからあなたが答えを出すなら、助けになるだろう。 – EricG