page = $('html').html(); // Сохраняем страницу в переменную page
$('html').html('<head><title>' + translations['core.no_internet_connection'] + '</title></head><body><div style="font: 12pt/10pt sans-serif; margin-top: 200px; text-align: center;"><p>' + options['siteName'] + '</p>' + translations['core.no_internet_connection'] + '</div></body>');
// Ставим таймер:
setTimeout(funvtion() {
$('html').html(page); // Спустя 5 сек. записываем содержимое переменной обратно на страницу
}, 5000);
window.onload = function () {
let line = document.querySelector('#line');
async function animateLine() {
let n = 10000;
let step = 100 / n;
let output_step = 0;
for (i = 0; i < n; i++) {
output_step += step;
line.style.width = output_step + "%";
console.log(output_step);
await new Promise(function(s) { setTimeout(s, 100); }); // Пауза в 100 мс.
}
}
animateLine();
}
(async function() {
try {
var response = await (await fetch('http://127.0.0.1:8000/api/feed/posts/', {
method: 'POST',
headers: {
'Authorization': 'Token a96a3545bb566272f0fdfb405a0cccb7173da660',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
},
body: 'page=1'
})).text();
console.log('Запрос успешно отправлен, ответ сервера:');
console.log(response);
}
catch(err) {
console.log('Запрос завершился неудачно, детали ниже:');
console.error(err);
}
})();
async function getIp(){
// Блок try выполнится полностью, если не будет ошибок:
try {
// Выполняем первый запрос:
var response1 = await (await fetch('https://json.geoiplookup.io/')).json();
// Выполняем второй запрос используя данные с первого:
var response2 = await (await fetch('https://ipapi.co/'+response1.ip+'/json/')).json();
return response2; // Возвращаем результат второго запроса
}
// Блок catch сработает только если будут какие-то ошибки в блоке try:
catch(err) {
// Выведем в консоли информацию об ошибке:
console.log('При запросе IP произошла ошибка, детали ниже:');
console.error(err);
// Вернем исключение с текстом поясняющим детали ошибки:
throw new Error('Один из запросов завершился неудачно =(');
}
}
// Вызовем функцию:
var info = await getIp();
// Выведем результат:
console.log('Результаты запроса IP ниже:');
console.dir(info);
await getIp();
не в консоли, а где-то внутри другой функции, то эта функция обязательна должна иметь приставку async, иначе получите ошибку. Например, вам надо вызывать эту функцию внутри функции test()
тогда не забудьте к ней добавить async:async function test() {
// ... ваш код
var info = await getIp();
// ... ваш код
}
// Ссылки:
var urls = [
'/link1',
'/',
'/link3'
];
var deferreds = []; // Массив для записи Deferred
// Перебираем ссылки в цикле jQuery:
jQuery.each(urls, function(num, link) {
// Создаем новый Deferred и
// записываем его наш массив:
deferreds.push(jQuery.Deferred());
// Отправляем запрос, указав через
// always, чтобы после завершения он
// успешно завершил созданный ранее Deffered:
jQuery.ajax(link).always(deferreds[num].resolve);
});
// Используем when, чтобы дождаться завершения всех Deferred:
jQuery.when.apply($, deferreds).done(function() {
// После завершения всех Deferred выведем результаты запросов:
console.log('Запросы успешно отправлены, их результаты ниже:');
console.dir(arguments);
});
var deferreds = []; // Массив для записи Deferred
// Перебором отправляем формы, создаем Deferred
// и добавляем их все в массив который создали выше:
$('form').each(function(num, form) {
deferreds.push($.Deferred(function(deferred) {
$.ajax({
'type': 'POST',
'url': form.action,
'data': $(form).serialize(),
'success': function(data) {
deferred.resolve(data);
},
'error': function(xhr, status) {
deferred.resolve(status);
}
});
}));
});
// По завершению всех Deferred из массива
// выполняем указанную функцию, в нашем случае
// тупо выводим в консоли все полученные ответы:
$.when.apply($, deferreds).done(function() {
console.log('Формы успешно отправлены, массив результатов ниже:');
console.dir(arguments);
});
<script>
$(function() {
// Ссылка на форму которую надо грузить без перезагрузки страницы:
var form = $('form[action="https://dev.itlvl.com/nashi-raboty/"]');
// Вешаем на поля формы обработчик кликов:
form.find('input[type="radio"]').click(async function(e) {
e.preventDefault(); // Предотвращаем клик
form.css('pointer-events', 'none'); // Блокрируем повторные клики
// Формируем ссылку на страницу которая содержит данные кликнутого таба:
var link = 'https://dev.itlvl.com/nashi-raboty/?' + $(this).attr('name') + '=' + $(this).val();
var request = $.ajax(link); // Запускаем процесс загрузкки этой страницы
// Пока грузится, делаем плавное исчезновение текущего таба:
await $('.grid-listing').animate({ opacity: 0 }, 500).promise();
// Получаем те данные что загрузили и меняем URL в браузере:
var html = await request; history.pushState(null, null, link);
// Удаляем атрибут активности со всех полей:
form.find('input[type="radio"]').removeAttr('checked');
$(this).attr('checked', 'checked'); // Делаем активным текущий таб
// Вставляем данные с нового таба на текущую страницу:
var doc = new DOMParser().parseFromString(html, 'text/html');
var html = $('.grid-listing', doc).html();
$('.grid-listing').html(html);
var html = $('.listing-page__pagination', doc).html();
$('.listing-page__pagination').html(html);
// Делаем плавное появление для вставленного контента:
await $('.grid-listing').animate({ opacity: 1 }, 500).promise();
form.css('pointer-events', ''); // Снимаем блокировку кликов
});
});
</script>