我正在尝试向表单添加一个侦听器,以便在用户离开时,进行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不是表单元素的有效事件。还有另一种方法可以实现我的需求吗?
答案 0 :(得分:2)
您需要使AJAX调用同步。如果它是异步的,它将永远不会执行,因为网站将卸载。使用同步请求,您可以锁定浏览器,直到它完成:
async: false
然而,我认为这不是一件好事。不要乱用默认的客户端行为,这是糟糕的用户体验。