Всем привет. Ребят, возможно ли вообще реализовать такое - при клике на кнопку отправлять ajax запрос на сервак с интервалом 1 минута и более для обновления данных в БД не смотря на закрытую или не активную вкладку в браузере. Решение как бы есть, но работает только если вкладка активна, т.е. в фокусе. Иначе браузер просто останавливает работу setinterval и по сути написанный скрипт просто бесполезен. Буду рад любым советам.
var newDate,
intervalId,
intervalId2;
if (localStorage["timer"]) {
newDate = new Date(localStorage["timer"]);
timer(); // Инициализация текста в элементах.
intervalId = setInterval(timer, 1000);
}
function onPlows(tm) {
$('#expand').hide();
$('.delinfo').hide();
span.style.display = 'block';
delplow.style.display = 'none';
plbtn.style.display = 'none';
newDate = Date.now() + 60 * tm; // tm - время которое задается в функции при нажатии на кнопку событие onclick
timer(); // Инициализация текста в элементах.
if (!intervalId) intervalId = setInterval(timer, 1000);
intervalId2 = setInterval(updFuel, 60000);
localStorage["timer"] = new Date(newDate).toISOString();
localStorage["span"] = true;
}
function timer() {
intervalId2;
var now = Date.now(),
rest = newDate >= now ? Math.round((newDate - now) / 1000) * 1000 : 0,
s = "";
if (!rest) {
clearInterval(intervalId);
clearInterval(intervalId2);
intervalId = null;
localStorage.removeItem("timer");
localStorage.removeItem("updFuel");
localStorage.removeItem("span");
localStorage.removeItem("selecttract");
localStorage.removeItem("selectplow");
$.ajax({
type: 'POST',
url: '../fieldfunc',
data: {
status_pl_field_udt: '2'
},
success: function() {
setTimeout(function() {
window.location.href = "../field";
}, 2000);
}
});
} else {
var rest2 = rest % 3600000;
let hh = (rest - rest2) / 3600000;
rest = rest2;
rest2 = rest % 60000;
let mm = (rest - rest2) / 60000;
rest = rest2;
rest2 = rest % 1000;
let ss = (rest - rest2) / 1000;
let ms = rest2;
s = (hh < 10 ? "0" : "") + hh + ":" +
(mm < 10 ? "0" : "") + mm + ":" +
(ss < 10 ? "0" : "") + ss;
}
document.querySelector("#time").textContent = 'До конца обработки: ' + s;
}
function updFuel() {
$('.info').remove();
$.ajax({
type: 'POST',
url: '../fieldfunc',
data: {
tract_pl_udt: localStorage.getItem("selecttract"),
fuel_pl_upd: 1
},
success: function(result) {
result = JSON.parse(result);
$('.updinfo').append('<p class="info" style="margin-bottom: 10px;"> Плуг: ' + localStorage.getItem("selectplow") + '<br>\
Трактор: ' + result[0].title + '<br>\
Топлива в баке: ' + result[0].fuel_now + ' литров</p>');
if (result[0].fuel_now == 0) {
$errors.text('Закончилось топливо. У Вас есть 3 минуты для заправки топлива.');
setTimeout(function() {
$.ajax({
type: 'POST',
url: '../fieldfunc',
data: {
tract_set: localStorage.getItem("selecttract"),
fuel_set: 0
}
});
clearInterval(intervalId);
clearInterval(intervalId2);
intervalId = null;
localStorage.removeItem("timer");
localStorage.removeItem("updFuel");
localStorage.removeItem("span");
localStorage.removeItem("selecttract");
localStorage.removeItem("selectplow");
window.location.href = "../field";
}, 1000 * 60 * 3);
}
}
});
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button class="btn plowsbtn" onclick="onPlows(' + 37000 * $fz + ');">Вспахать</button>
UPD "Лучше бы вы описали, что вы хотите сделать(что за скрипт) и какую информацию отправляете в базу?" Ответ: при клике на кнопку запустить таймер обратного отсчета и с интервалом 1 минута обновлять информацию в базе о топливе и обновленную информацию выводить пользователю на экран.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
К примеру, я получаю указатель const void * на некоторый массив однородных данных (массив) и количество элементов в немЭто может быть, к примеру,...
Пытаюсь очистить стекСоздаю структуру после этого помещаю её в стек и пытаюсь очистить его, но на дебагере ничего не происходит