【问题标题】:pause a javascript before page refresh在页面刷新之前暂停 javascript
【发布时间】:2013-01-23 07:49:32
【问题描述】:

我只是 Javascript 的新手,但我遇到了一些严重的问题,我在不同的来源上搜索了好几个小时,所以我决定发布这个问题。

如何在刷新或关闭 asp.net 页面之前停止/暂停 javascript? 代码如下:

<script type="text/javascript">

    window.onbeforeunload = confirmExit;

    function confirmExit() {

        var connection = new Ext.data.Connection({
            defaultHeaders: {
                'Content-Type': 'application/json'
            }
        });
        connection.request({
            url: 'services/vault/deletewfinstace/'
        });
        refresh();
        //alert("Helloo");
    }

    function refresh() {
        setTimeout(function () { window.location.reload() }, 6000);
    }



</script>

在这段代码中,我在事件上调用了一个 javascript 函数:window.onbeforeunload,并尝试在函数完成其工作后放置一个 setTimeout(),但页面仍会刷新或关闭,而没有正确完成函数的内容.当我在函数末尾使用 alert() 时,函数内部的内容将成功执行,但这对用户来说有点烦人。请帮忙。谢谢。

【问题讨论】:

    标签: javascript asp.net settimeout onbeforeunload


    【解决方案1】:

    我想connection.request 是异步的。当您发送请求时,JS 运行器将空闲,导致窗口重新加载。如果您希望浏览器在重新加载之前等待,请尝试使请求同步。

    【讨论】:

    • 虽然这是对问题的正确答案,但我认为在用户重新加载或离开页面时让浏览器等待不是很友好的做法是个好主意。
    • 您的观察是正确的,但同步 AJAX 不能推荐。
    • 哇。感谢您的快速回答,我非常感谢。我曾尝试在 Ext.js 中搜索同步请求,但正如我所读到的,他们不鼓励使用它。会不会给页面带来一些麻烦?还是服务器?再次感谢您的回复。
    • @johnSabre 同步请求的问题是它们阻塞了 UI 线程。 onBeforeUnload 的问题是无法阻止卸载,所以需要通过阻塞调用来延迟。
    • 嗨,我已经搜索了关于在页面上进行调用(卸载时的 asp 页面事件)或依赖会话,但我意识到它必须是这个 Web 服务调用。 @JanDvorak,“阻塞呼叫延迟”是什么意思?如果只有alert()的等价物,但只是一秒钟左右。感谢您的帮助。
    【解决方案2】:

    创建一个同步的 Ajax 请求,这将锁定浏览器,直到服务器响应。

    【讨论】:

    • 不客气,如果可以,请将我的回答标记为有用:)
    • @fmodos John 发现另一个值得接受的答案 - 我希望你不介意。您只能希望获得支持,但 1-ers 不能支持。
    • 好的,感谢您的更新...这是我在这里的第二天,所以还在学习规则
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 2011-01-07
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    相关资源
    最近更新 更多