После java асинхронность в js это беда для меня.
Суть проблемы: написать функцию, которая проверяет наличие файла, если есть, то true
, нет - false
. Казалось бы все просто, но не тут то было.
Использовал deprecated функцию. И наплодил много кода с ее использованием. Теперь нужно сделать так, чтобы эта же функция работала так же, но была реализована по другому.
Теперь у меня код в if
выполняется как false
, не дожидаясь верного ответа от doesFileExist(urlToFile);
Подскажите пзл, как сюда можно прикрутить ноги? С $.when
у меня не получается ничего (
function doesFileExist(urlToFile) {
$.ajax({
url: urlToFile,
type: 'HEAD',
error: function () {
console.log(false)
return false;
},
success: function () {
console.log(true)
return true;
}
});
}
if(doesFileExist(url)){}
старый вариант
function doesFileExist(urlToFile){
var xhr = new XMLHttpRequest();
xhr.open('HEAD', urlToFile, false);
xhr.send();
if (xhr.status == "404") {
return false;
} else {
return true;
}
}
Добавьте 2 новых параметра в функцию doesFileExist
, например, successCallback
и failCallback
. Вместо return true/false
, выполняйте эти функции: successCallback()/failCallback()
.
И конечный вызов метода будет примерно такой:
doesFileExist(url, function() {
// файл существует
}, function () {
// файл отсуствует
});
Старый вариант - синхронный код (главный поток будет «заморожен»* до получения результата). Новый вараинт - асинхронный. И функция doesFileExist
после отправки асин. запроса будет возвращать undefined
(так как когда мы ничего не возвращаем (то что в success
и error
, выполнится позже, после получения ответа), возвращается undefined
)
doesFileExist() {
//async action
setTimeout(function(){ return true; }, 0)
// return undefined
}
console.log(doesFileExist()); // undefined
Чтобы обработать полученный результат, нужно создать функции (в данном случае две), которые будут вызываться при получении ответа.
var successCallback = function() { console.log(true); }
var errorCallback = function() { console.log(false); }
doesFileExist(url, successCallback, errorCallback);
function doesFileExist(urlToFile, success, error) {
$.ajax({
url: urlToFile,
error: error,
success: success
});
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть скрипт для отправки формы, подскажите, как вместо алерта вывести скрытый див с благодарностями?.