Как указано в комментариях, речь идет не столько о современном коде или соглашениях jQuery, сколько о неправильном понимании возврата данных из асинхронных вызовов jQuery. Новый или старый код, вы не можете вернуть ответ от done()
или always()
обратного вызова.
Сами документы jQuery включают простой пример - в разделе Объект jqXHR , прокрутите вниз под желтым Уведомление об устаревании .
Вот рабочий JSFiddle с модифицированной версией вашего кода, используя подход, описанный в jQuery документы. Посмотрев его с открытой консолью, я добавил серию console.log()
s, чтобы показать последовательность запуска и продемонстрировать получение и использование ответа, как и ожидалось. Обратите внимание, что JSFiddle включает способ имитации асинхронных c запросов, сделав их /echo/json
, и я обновил код, чтобы использовать его, чтобы мы могли видеть, как он работает.
function getData (url, privateToken) {
// return the jqXHR object, which is not your response!
return $.ajax({
'url': url,
// ... etc
}).done(function (response) {
// you can log response here, display alerts, manipulate DOM, etc,
// but not return anything useful
});
}
$(document).ready(function(){
var $ajax = getData("/echo/json/", "token");
// Execution will continue here long before getData has completed
$ajax.always(function(response, textStatus, jqXHR) {
// Now getData has finished, and we have the response!
console.dir(response);
});
});