Хорошо, вот проблема, с которой я борюсь. У меня есть этот код (simplyfied):Функция jQuery ajax .done() срабатывает слишком рано?
var initializeZasilkovna = function() {
// Initialize object
window.packetery.initialize();
};
// Check if the object doesnt exist
if (!window.packetery) {
// It doesnt exists. Download it.
$.ajax({
url: document.location.protocol + "//www.zasilkovna.cz/api/v2/4854erws856w4efs/branch.js",
dataType: "script",
cache: true
}).done(function() {
// After download is complete initialize it.
initializeZasilkovna();
});
} else {
// It exists only initialize it.
initializeZasilkovna();
}
Это заканчивается с "window.packetery" ошибки не определен.
Дело в том, что я хочу загрузить удаленный скрипт на какое-то событие, потому что он слишком велик. После его загрузки я хочу вызвать функцию, которая ее инициализирует.
Проблема заключается в том, что функция .done() не дожидалась полной загрузки сценария и слишком рано запускает инициализацию. Ожидается ли функция .done()? Когда я добавляю setTimeout, он работает правильно. Что может быть неправильным парнем?
Самое забавное, что у меня есть один и тот же код на интерфейсе и работает правильно. Я не понял, что не так. Любые советы приветствуются. Спасибо!
'$ .getScript()'? –
создать проверку setInterval, которая неоднократно проверяет, чтобы она существовала, один раз, скажем, через 100 мс после завершения запроса ajax. очистите интервал, как только он будет доступен. Не самое чистое решение, но оно работает каждый раз в каждом браузере. –
@KevinB, нет, это не работает, если соединение (мобильное) или веб-сайт работает медленно. – FeedTheWeb