Im正在尝试基于非活动用户列表执行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 body im中使用以下代码,该代码将执行jQuery函数:
echo "<button type='submit' onclick='reactivateThisUser(".$row["id"].");' id='reactivateButton".$row["id"]."'>Reactivate User</button>";
我不确定我在这里遗漏了什么,但我在这一点上敲了我的头。我敢肯定它确实缺少了一些非常简单的东西。
为了以防万一,下面是来自reactivate-user.php的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();
}
?>
发布于 2021-01-16 01:58:29
如果用<form>
包装<button>
元素,我已经在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会有区别。我在这两个版本中都尝试了这个新版本,看起来都很好。
https://stackoverflow.com/questions/65745530
复制相似问题