Это невозможно сделать напрямую из-за асинхронного вызова AJAX.
Есть два способа достичь желаемого
1.
Создание функции / с для кода, который вы хотите выполнить после успешного запроса ajax
Вызов этой функции / с из блока успеха ajax
Например.
function load_data(){
$.ajax({
.....,
success: function (response) {
$('.element').attr('data-foo', 'bar');
console.log($('.element').data('foo')); // Your code goes here
}
})
}
2
- Возврат
$.ajax
в load_data
функции - И использование
.then
или .done
функция для самого load_data
Например.
function load_data(){
return $.ajax({
.....,
success: function (response) {
$('.element').attr('data-foo', 'bar')
}
})
}
load_data().done(function() {
console.log($('.element').data('foo')); // Your code goes here
});
Однако .done и .then ведут себя не одинаково.В частности, если стандартный обратный вызов обещания возвращает другое обещание, это задержит разрешение всех последующих обещаний.Тогда jQuery ведет себя так, но не делает.Для завершенного обратного вызова невозможно отложить разрешение последующих обратных вызовов.