Javascript:压制“此页面要求您确认要在onbeforeunload上保留”弹出窗口

时间:2012-02-09 22:25:59

标签: javascript ajax onbeforeunload

当用户离开页面时,我需要问他是否要在离开之前执行特定操作。

<script type="text/javascript">
$(document).ready(function() {
        window.onbeforeunload = askConfirm;
});

function askConfirm() {
    var addFriend = confirm("Would you like to ping?");
    if (addFriend) {
        var xmlhttp;
        if (window.XMLHttpRequest) {
            xmlhttp=new XMLHttpRequest();
        } else {
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.open("GET","http://example.com?ping=1234",true);
        xmlhttp.send();
    }
    return null;
}

取决于上一个return语句(""nulltruefalse或没有return的值完全声明)我可以有以下两种情况之一:

1)用户获得“你想ping吗?”确认(好),ping发送(好),向用户显示“此页面要求您确认要离开”弹出窗口(BAD)

-OR -

2)用户获得“你想ping吗?”确认(好), ping 已发送(BAD),并且用户显示“此页面要求您确认你想离开“弹出窗口(好)。

我如何发送AJAX ping,但拒绝“此页面要求您确认要离开”弹出窗口?

编辑:听起来很荒谬,我在alert()声明后xmlhttp.send()找到了解决此问题的“解决方法”。唯一干净的方法是提醒用户他的ping已被发送。如果未来StackOverflowers找到更好的解决方案,我很想知道。

感谢。

2 个答案:

答案 0 :(得分:9)

您可以使Ajax请求同步。

xmlhttp.open("GET","http://example.com?ping=1234", false); // use false here 
xmlhttp.send(); 

如果您的服务器速度很慢,可能会导致轻微的延迟,但它应该可以解决ping不被发送的问题。

答案 1 :(得分:2)

好吧,而不是在你离开之前做的,我做了onunload,这是我在FF和IE工作(除了chrome,这就是我得到的):http://jsfiddle.net/rmpLm/9/

也许你可以让它在chrome上工作,但如果你不能,也许你可以这样做,如果你点击确定,它会带你到你发送它的页面。希望它有所帮助:)

编辑:也许你应该考虑制作它以便它上载