Ten fragment kodu działał w wersji 1.7.2 zarówno z wezwaniami zwrotnymi/błędami, jak iz obietnicami zwrotów stylistycznych. W wersji 1.8.2 wywołania zwrotne/błędy nadal działają, ale obietnice nie. Mam przeczucie, że linia return dfd.promise(jqXHR);
jest problemem, ale nie jestem pewna.Moje obietnice już nie działają w 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);
});
Aktualizacja: Oto mój wniosek, że nie ajax:
$.ajax({
url: someFunctionToGetUrl(),
// works
//success: callback,
//error: ajaxErrorHandler
}).then(
[callback],
[errorback, ajaxErrorHandler]
);
};
Czy Twoje żądania są synchroniczne? Jeśli tak, to nie zadziała z 'jqXHR'. Z dokumentacji: "Od wersji jQuery 1.8 użycie async: false z jqXHR ($ .deferred) jest przestarzałe, należy użyć pełnych/powodzenia/błędów zwrotnych." – bfavaretto
Nie, dodano moje żądanie ajax w poście – ryan
Czy znasz już debugger Chrome? >. < Twój wpis może zostać wysłuchany przez osoby, które: 1 odbierają dokładnie to samo (lub prowadzą badania). 2 Miej cierpliwość i wolę, aby ustawić przykład do zbadania.Więc gdybyś udzielił odpowiedzi, byłoby to pomocne. – EricG