我试图基于非活动用户列表执行MySQL更新。我只是想用数字1更新数据库字段。我可以在Chrome中完美地运行这个功能,但在Firefox中就不成功了。我在StackOverflow上看到了很多类似的问题,但是没有找到解决方案。由于这是在Chrome中工作,我认为问题是与我的jQuery AJAX调用:
<script src="../bin/jquery-3.5.1.min.js"></script>
<script>
function reactivateThisUser(id)
{
jQuery.ajax({
type: "POST",
url: "reactivate-user.php",
data: 'id='+id,
cache: false,
});
}
</script>
然后在HTML正文中使用下面的代码,这是执行jQuery函数:
echo "<button type='submit' onclick='reactivateThisUser(".$row["id"].");' id='reactivateButton".$row["id"]."'>Reactivate User</button>";
我不知道我在这里错过了什么,但我已经在这一点上打了我的头。我肯定是少了一些很简单的东西。
以防万一,下面是我的php代码,来自reactivate-user.php:
<?php
require_once "config.php";
$reactivateThisUser = @$_POST['id'];
$link = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
if($link === false){
die("ERROR: Could not connect. " . mysqli_connect_error()); }
$sql = "UPDATE table SET is_active='1' WHERE id='$reactivateThisUser'";
if ($link->query($sql) === TRUE) {
header("location: ../view-all-users");
exit;
$link->close();
} else {
header("location: ../error/3");
exit;
$link->close();
}
?>
如果<button>
元素被<form>
包裹,我在Firefox中重复了这个问题。
似乎正在发生的是,点击<button>
触发JavaScript事件处理程序,但它也触发一个表单提交,终止脚本之前,它完成其AJAX调用。
答案是禁用表单提交。
<script>
function reactivateThisUser(id)
{
// prevent default action
window.event.preventDefault();
jQuery.ajax({
type: "POST",
url: "reactivate-user.php",
data: 'id='+id,
cache: false,
});
}
</script>
我不知道为什么Chrome和Firefox有区别。我在两个版本上都试用了这个新版本,两个看起来都很好。