PHP jQuery Ajax调用只适用于Chrome,不适用于其他浏览器



我试图基于非活动用户列表执行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有区别。我在两个版本上都试用了这个新版本,两个看起来都很好。

相关内容

  • 没有找到相关文章

最新更新