Jquery函数没有触发 - onunload

时间:2017-08-15 23:54:47

标签: javascript php jquery ajax

我正在尝试向表单添加一个侦听器,以便在用户离开时,进行ajax调用,但似乎没有发生任何事情。在firefox中没有看到任何错误,当我离开页面告诉我代码不正确时,没有任何东西得到控制台记录。 jquery(和ajax)相当新,希望有人能告诉我这里我做错了什么。

html:home / folder / index.php

$foo = "blah blah ". implode(',', $some_array['a key']). "";
                                                        # ^ This is only if you need extra string here

Jquery:home / scripts / main.js

<script>

var rowid = "<?php echo $_SESSION['rowid'] ?>";
var user = "<?php echo $_SESSION['user'] ?>";

</script>
...
<form id="update" method="post" action="index.php?update=1" autocomplete="off">

php:home / includes / ajax.php

var end_lock = 0;
$('#update').on('unload', function(){
    end_lock = 1;
    console.log('error');
});
window.onunload = callAjaxRecordLock;
function callAjaxRecordLock(){
    if (end_lock === 1){
        $.ajax({
            url: 'home/includes/ajax.php',
            type: 'POST',
            data: {
                method: 'ajax_record_lock',
                rowid: rowid,
                user: user,
                endlock: 1
            }
        });
    }
}

修改 找到此链接https://api.jquery.com/category/events/form-events/,其中似乎beforeunload不是表单元素的有效事件。还有另一种方法可以实现我的需求吗?

1 个答案:

答案 0 :(得分:2)

您需要使AJAX调用同步。如果它是异步的,它将永远不会执行,因为网站将卸载。使用同步请求,您可以锁定浏览器,直到它完成:

async: false

然而,我认为这不是一件好事。不要乱用默认的客户端行为,这是糟糕的用户体验。