【问题标题】:Beforeunload Function is Not working And not updating the records after unloadBeforeunload 功能不起作用并且卸载后不更新记录
【发布时间】:2026-01-29 10:40:02
【问题描述】:

这是我的代码

function myfoo() {
  $.ajax({
    type: "POST",
    url: "update.php",
    dataType: 'json',
    async: false,
    data: {
      Eventid: 1,
      Seats: 'Seats'
    },
    success: function(r) {}
  });
}

$(window).on('beforeunload', function() {
  return 'Are you sure you want to leave?';
});
$(window).on('unload', function() {
  console.log('calling ajax');
  myfoo();
});

update.php 代码

<?php
session_start();
include 'conn.php';

if(isset($_SESSION['Seats'])) {
    $seatS=$_SESSION['Seats'];
    $Eventid=$_SESSION['Eventid'];
    $cats = explode(" ", $seatS);
    $cats = preg_split('/,/', $seatS, -1, PREG_SPLIT_NO_EMPTY);
    foreach($cats as $key => $cat ) {
        $cat  = mysql_real_escape_string($cats[$key]);
        $cat = trim($cat);
        if($cat !=NULL) {
            $stmt = $con->prepare('UPDATE fistevent SET `Status`=" " where `Event_Id`=? AND `seats`="'.$cat.'" AND `Status`="Hold" ');
            $stmt->bind_param("s", $_SESSION['Eventid']);
            $stmt->execute();
            session_destroy();
        }
    }
}

?>

【问题讨论】:

  • 你有什么问题?
  • Javascript 控制台有错误吗?
  • @Barmar sir iam 试图通过窗口卸载更新记录。但卸载后记录未更新
  • 把它放在问题中,而不是评论。
  • 当您尝试离开页面时是否会收到提示?

标签: php ajax onbeforeunload onunload


【解决方案1】:

AJAX data: 参数放在$_POST,而不是$_SESSION

如果您使用的是mysqli,则不能使用mysql_real_escape_string。使用bind_param() 时不需要转义参数。而且您可以使用explode() 而不是preg_split(),因为您的分隔符中没有正则表达式模式; array_filter() 可用于删除空白条目。

<?php
include 'conn.php';

if(isset($_POST['Seats'])) {
    $seatS=$_POST['Seats'];
    $_SESSION['Seats'] = $seatS;
    $Eventid=$_POST['Eventid'];
    $_SESSION['Eventid'] = $Eventid;
    $cats = array_filter(array_map('trim', explode(',', $seatS)));
    $stmt = $con->prepare('UPDATE fistevent SET `Status`=" " where `Event_Id`=? AND `seats`= ? AND `Status`="Hold" ') or die($con->error);
    $stmt->bind_param("ss", $_POST['Eventid'], $cat);
    foreach($cats as $key => $cat ) {
        $stmt->execute();
    }
}
?>

【讨论】:

  • 先生没有错误,但它没有更新记录
  • 可以手动执行查询吗? UPDATE fistevent SET Status = " " WHERE Event_Id = 1 AND seats = "Seats" AND Status = "Hold"
  • 我认为问题在于传递了错误的数据。我必须在 ajax $seatS=$_SESSION['Seats']; 中发送这些数据$Eventid=$_SESSION['Eventid'];.. 怎么可能?
  • 您不能在 Javascript 中设置会话变量。它只能发送$_POST$_GET 变量。如果需要,您可以从 post 参数中设置会话变量,但我不明白为什么这个查询需要这样做。
  • 或此字段数据>>