我必須在頁面解除事件中執行同步 ajax 方法,但現代瀏覽器不再支持在 beforeunload 事件中執行同步方法。
為此,我實作了一個新的承諾,只有在 ajax 方法完成其執行后才會解決,它在按鈕單擊時作業正常。
但是在頁面 beforeunload 事件中,由于提示“離開站點?所做的更改可能無法保存”,該函式停止執行。
當用戶點擊離開時,它不會被執行。
有什么建議?
//索引.html
<button type="button" onclick="checkAjaxWithAsync()">Check with Async</button>
//索引.js
var isUpdated = false;
var interval;
var data;
var newHandle;
//Save report as HTML with file name...
$(document).ready(function () {
$(window).on("beforeunload", async function (event) {
await checkAjaxWithAsync();
})
})
function ajaxCall() {
$.ajax({
type: 'POST',
url: '@(Url.Action("CheckAjax"))',
async: true,
success: function (result) {
console.log(result)
isUpdated = true;
clearInterval(interval);
},
error: function () {
debugger;
}
}).done(function () {
console.log('After done')
});
console.log('After ajax');
}
async function checkAjaxWithAsync() {
isUpdated = false;
await processFunction();
console.log('is updated:',isUpdated)
console.log('Hi From Do IT')
}
async function waitUntil() {
return await new Promise(resolve => {
const interval = setInterval(() => {
if (isUpdated) {
resolve('completed');
clearInterval(interval);
};
}, 1000);
});
}
async function processFunction() {
ajaxCall();
await waitUntil()
console.log('after interval')
}
//HomeController.cs
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
[HttpPost]
public string CheckAjax(object data)
{
System.Threading.Thread.Sleep(1000 * 10);
return "Hello";
}
}
uj5u.com熱心網友回復:
根據你的描述,這個要求恐怕無法實作。因為這是內置行為,旨在僅允許出于安全目的進行非常小的更改。
beforeunload 的主要目的是允許用戶選擇在更改丟失之前保存更改。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/311578.html
標籤:javascript 阿贾克斯 asp.net-mvc 谷歌浏览器 microsoft-edge
上一篇:訪問一個類的屬性到另一個
