Ваша проблема в том, что ваш ajax
вызов асинхронный, и поэтому a
не переназначается при регистрации.Вот решение вашей проблемы с использованием Promise
для создания асинхронной функции, resolve
, для отметки return
этой асинхронной функции и .then()
для выполнения каких-либо действий после этой асинхронной функции:
var a = '';
$(document).ready(function () {
app.getHospital({
areaId: ''
});
app.getDoctorComplete({
doctorId: doctorId,
doctorel: $('#dropdown_doct')
})
.then(() => { // Add the .then() callback to do something after getDoctorComplete finished
$('#dropdown_hosp').change(function () {
var dropdownspecialty = $('#dropdown_spec');
app.getSpecialty({
hospitalId: $('#dropdown_hosp').val(),
apiUrl: 'api',
special: dropdownSpec
});
});
});
});
app = function () {
function getHospital({
areaId
}) {
return new Promise((resolve, reject) => {
// ...
$.ajax({
// ...
success: function (result) {
// ...
},
// ...
}).done(function () {
$('#dropdown_hosp').select2();
resolve(); // Add resolve
});
});
};
function getSpecialty({
hospitalId,
apiUrl,
special
}) {
return new Promise((resolve, reject) => {
// ...
$.ajax({
// ...
}).done(function () {
// test here
console.log(a);
resolve(); // Add resolve
});
});
};
function getDoctorComplete({
schdoctor_id,
doctorel
}) {
return new Promise((resolve, reject) => {
// ...
$.ajax({
// ...
success: function (result) {
// ...
},
// ...
}).done(function () {
// ...
a = 'chelsea';
b = '..';
$('#dropdown_hosp').val(b).trigger('change');
resolve(); // Add resolve
});
});
};
return {
getSpecialty: getSpecialty,
getDoctorComplete: getDoctorComplete
}
}();