Как и при любом рефакторинге, идентифицируйте и изолируйте повторяющийся код и передайте уникальные биты.В этом случае, например, вы можете изолировать вызов ajax и синтаксический анализ json в функцию и передать URL, данные и т. Д.
Эта функция может вернуть обещание , которое разрешает /при необходимости отклоняет.
Учитывая приведенную ниже функцию doRequest
(псевдокод, не тестировался и, возможно, потребуется небольшая подстройка для реального использования), вы можете использовать ее повсеместно с меньшим количеством нажатий клавиш:
doRequest('pwreset.php', postdata, button)
.then(result => {
// do something with the result
})
.catch(error => {
// deal with the error
});
или
try {
const result = await doRequest('pwreset.php', postdata);
// do something with result
}
catch (e) {
// handle error
}
Все элементы шаблона находятся в doRequest
.
async function doRequest(url, data, button, type = "POST") {
return new Promise((fulfill, reject) => {
$.ajax({
type,
url,
data,
cache: false,
success: function(data) {
$btnStatusElem.button('reset');
try {
const datajson = JSON.parse(data);
} catch (e) {
return reject(e);
};
return datajson['success'] == true ?
fulfill(datajson) :
reject(datajson);
}, //success
error: function(msg) {
return reject(msg);
}
});
})
}
Как говорит @ mister-jojo , вы также можете рассмотреть возможность использования [fetch api] вместо jQuery, но применяется тот же принцип.