#javascript #jquery #ajax
у меня есть страница последовательной загрузки скриптов за генерацию нужной страницы
отвечают несколько скриптов
сейчас есть проблема с прогрузкой страницы -точнее она работает через раз , то загружается
весь контент, то нет!
..код из этого файла (ниже).
var pageLoaded = false; // переменная, означающая, что все скрипты на странице были
загружены (используется в header.js)
$(document).ready(function() {
$.getScript('js/check-authorization.js', function() {
$('#header').load('html/header.html', function() {
$('#footer').load('html/footer.html', function() {
$.getScript('js/functions/convertJsonToHtmlTreeForBspiAndIkz35.js',
function() {
$.getScript('locales/translate.js', function() {
$.getScript('js/header.js', function() {
$.getScript('js/functions/transofm-into-devices.js',
function() {
$.getScript('js/functions/transform-firmware_version.js',
function() {
$.getScript('js/settings-for-device.js', function() {
$.getScript('js/settings-for-device-part2.js',
function() { // необходим для последовательной загрузки выполнения асинхронных действий
$.getScript('js/functions/switch-between-devices.js',
function() {
if ( window.engineerAnthrax == true ) {
$.getScript('js/functions/send-firmware-version.js',
function() {
$.getScript('js/functions/send-firmware-version-stm.js',
function() {
changeLanguage();
pageLoaded = true;
});
});
} else {
changeLanguage();
pageLoaded = true;
}
});
});
});
});
});
});
});
});
});
});
В файле settings-for-device-part2.js есть код сет тайм аут
if (
( deviceDeviceType == 1584 ) || // ИКЗ-35
( deviceDeviceType == 1588 ) || // ИКЗ-31Л
( deviceDeviceType == 1589 ) || // ИКЗ-33Л
( deviceDeviceType == 1591 ) // ИКЗ-32Л
) {
var timerHideTriggers = setInterval(function() {
if ( // проверяем существуют ли элементы
( $('#th-ptg-in-network').length )
) {
clearInterval(timerHideTriggers);
// - ОЗЗ в сети
$('#th-ptg-in-network').css('display', 'none');
$('#EventsTypesSaveRecord-check9').parent().css('display', 'none');
$('#EventsTypesReportAsFail-check9').parent().css('display', 'none');
}
}, 100);
setTimeout(function() {
clearInterval(timerHideTriggers);
}, 1000);
}
Вопрос в том, что задержка используется для корректной подгрузки файлов локализации.
но т.к контент динамический -все продолжает ломаться на других данных.Как пофиксить это ?
Ответы
Ответ 1
Я бы промисифицировал эти функции и использовал Promise.all чтобы дождаться, когда загрузятся все. Примерно так: // Предположим, что fn требует callback последним аргументом function promisify(fn) { return function(...args) { return new Promise((resolve) => fn.bind(this)(...args, resolve)); } } $(function() { $.getScript = promisify($.getScript); $.fn.load = promisify($.fn.load); // Могу ошибаться, но надеюсь, что сработает Promise.all([ // Первая порция $.getScript('js/1.js'), $.getScript('js/2.js'), $.getScript('js/3.js'), $('#header').load('html/header.html'), ]).then(() => Promise.all([ // вторая порция $.getScript('js/dep_1.js'), $.getScript('js/dep_2.js'), ])).then(() => $.getScript('js/another.js')) // Ещё скрипт после второй порции .then(() => { changeLanguage(); console.log('Loaded'); }) }) Plunkr () => {}: Стрелочные функции ...args: Rest-оператор(остальные аргументы) и Spread синтаксис Promise Promise.all bind
Комментариев нет:
Отправить комментарий