На моем .NET
Core MVC веб-сайте я использую VueJs. в моем контроллере есть действие по обновлению базы данных, и для его завершения требуется почти 2 минуты. Поэтому, если другой пользователь открывает веб-сайт, на странице отображается сообщение «Пожалуйста, подождите, пока обновление базы данных не будет завершено». Я не хочу, чтобы какой-либо другой пользователь обновлял базу данных ... Только для пользователя.
ЧТО Я ИМЕЮ: Я использовал SQL таблицу, и если первый пользователь нажимает При помощи кнопки Обновить я устанавливаю в поле таблицы значение True, пока обновление не будет завершено. Как только обновление завершено, я установил для этого поля значение False. Когда новый пользователь входит на сайт, программное обеспечение проверяет эту таблицу SQL и, если статус TRUE, он показывает, пожалуйста, подождите.
ВЫПУСК : Если первый пользователь нажимает кнопку обновления и закрывает браузер! Поэтому SQL статус таблицы установлен в True, и никто другой не может его изменить.
SOLUTION : Я хочу вызвать метод Action, если пользователь закрывает свой браузер.
Что я сделал Я использую ajax для вызова метода действия в домашнем контроллере, но он не работает.
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$(window).on("beforeunload", function(e) {
$.ajax({
type: "POST",
url: "@Url.Action("SetUpdateStatusFalse")",
data: {},
dataType: "text",
success: function (msg) {
alert(msg);
},
error: function (req, status, error) {
alert(error);
}
});
return e.originalEvent.returnValue = "Your message here";
});
});
</script>
ПРОБЛЕМА С КОДОМ : не работает. Ajax код работает, если я поместил код за пределы
$(window).on("beforeunload", function(e) {}
Я Утомил также с Vue JS, я считаю, что выборка не работает, потому что Пользователь уже закрыл браузер windows. Выборка не может быть использована после.
Vue:
new Vue({
el: '#app',
created() {
window.addEventListener('beforeunload', () => {
const that = this;
console.log("User clsoed browser");
browserClosed(that, getJsonUrl("Home", "SetUpdateStatusFalse"), function (data) { });
}, false)
}
Метод действия в Home Controller:
public JsonResult SetUpdateStatusFalse(){
//SET Database False
retrun Json("");
}
JS Файл:
function browserClosed(vue, url, onSuccess) {
fetch(url, { method: 'GET', credentials: 'include' })
.then(
function (response) {
return;
}
}
)
.catch(function (err) {
console.log('Fetch Error: ', err);
});
}