2017-08-15 37 views
1

我想添加一个监听器到一个窗体,以便当用户离开它时,ajax调用被做出,但似乎没有发生。在Firefox中没有看到任何错误,并且在我离开页面时没有任何控制台记录,这告诉我代码不正确。 jquery(和ajax)相当新颖,希望有人能告诉我我在这里做错了什么。jquery函数没有发射 - onunload

HTML:家用/文件夹/ index.php文件

<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"> 

jQuery的:家庭/脚本/ main.js

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 
      } 
     }); 
    } 
} 

PHP:家用/包括/ ajax.php

<?php 

if (isset($_POST['method'])) { 
    $_POST['method'](); 
} 

function ajax_record_lock(){ 
    $ajax_rowid = $_POST['rowid']; 
    $ajax_user = $_POST['user']; 
    $ajax_endlock = $_POST['endlock']; 

    if (isset($ajax_rowid) && isset($ajax_user) && isset($ajax_endlock)) { 
     sp_record_lock($ajax_rowid, $ajax_user, $ajax_endlock); 
    } 
} 

编辑: 找到此链接https://api.jquery.com/category/events/form-events/看来beforeunload不是表单元素的有效事件。是否有另一种方法来实现我所需要的?

+0

控制台在服务器和jQuery的一些任意位置,看看它有什么问题。另外尝试向ajax添加回调函数,以查看结果是否回到客户端 – forJ

+0

在$('#update')。on('unload',function()...中添加了一个控制台日志。 – wonderstruck80

回答

2

您需要使AJAX调用同步。如果它是异步的,它将永远不会执行,因为网站将卸载。随着同步请求你锁定浏览器,直至其发:

async: false 

不过,我认为这不是做一件好事。不要混淆默认的客户端行为,这是糟糕的用户体验。

+1

这并没有解决我的问题,但仍然upvoted,因为我确信这会让我后来得到 – wonderstruck80

+1

你必须绑定卸载事件窗口。尝试将该行更改为$(窗口).on(“unload”,function(){ – ishegg