AJAX 和 PHP 切换按钮状态无法正常工作

问题描述 投票:0回答:1

我对 AJAX 还很陌生,并且正在努力解决这个问题,我认为这很大程度上是toggle.php 的问题。我有这段代码,它在大多数情况下都有效。但是,当手动重新加载页面并且切换 = ON 时,状态会混合,因此按钮处于关闭状态。 PHP 似乎没有重置并且处于开启状态。我尝试更改一些内容,但似乎找不到逻辑错误。

fetchToggleStatus 函数是 chatgpt 添加的,并带来了一些帮助。所以不妨删除它。

切换按钮.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Button Toggle with AJAX and PHP</title>
</head>
<body>

<button id="toggleButton">Toggle</button>
<div id="resultContainer"></div>

<script>
    document.addEventListener('DOMContentLoaded', function () {
        var toggleButton = document.getElementById('toggleButton');
        var resultContainer = document.getElementById('resultContainer');

        // Fetch the initial toggle state when the page loads
        fetchToggleStatus();

        toggleButton.addEventListener('click', function () {
            var xhr = new XMLHttpRequest();
            xhr.open('POST', 'toggle.php', true);

            xhr.onreadystatechange = function () {
                if (xhr.readyState == 4 && xhr.status == 200) {
                    resultContainer.innerHTML = xhr.responseText;
                    updateButtonAppearance();
                }
            };

            xhr.send();
        });

        function fetchToggleStatus() {
            var xhr = new XMLHttpRequest();
            xhr.open('GET', 'toggle.php', true);

            xhr.onreadystatechange = function () {
                if (xhr.readyState == 4 && xhr.status == 200) {
                    resultContainer.innerHTML = xhr.responseText;
                    updateButtonAppearance();
                }
            };

            xhr.send();
        }

        function updateButtonAppearance() {
            var currentText = toggleButton.innerText;
            var newColor = currentText === 'Toggle OFF' ? 'green' : 'red';
            toggleButton.style.backgroundColor = newColor;
            toggleButton.innerText = currentText === 'Toggle OFF' ? 'Toggle ON' : 'Toggle OFF';
        }
    });
</script>

</body>
</html>

切换.php

<?php
session_start();

// Check if the toggle is set in the session, initialize if not set
if (!isset($_SESSION['toggle_status'])) {
    $_SESSION['toggle_status'] = false;
}

// Toggle the status only when a POST request is received
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $_SESSION['toggle_status'] = !$_SESSION['toggle_status'];
}

// Return the current status
if ($_SESSION['toggle_status']) {
    echo "Toggle is ON";
} else {
    echo "Toggle is OFF";
}
?>
javascript php ajax button toggle
1个回答
0
投票

当您重新加载页面时,会话 cookie 仍会发送到服务器,因此当调用

isset($_SESSION['toggle_status'])
时,它会返回 True。

这是你的问题,当你重新加载页面时,会话中的值可以设置为 true。因此,在执行 get 请求时,您应该将会话值设置为 False。

if ($_SERVER['REQUEST_METHOD'] === 'GET') {
    $_SESSION['toggle_status'] = false;
}
© www.soinside.com 2019 - 2024. All rights reserved.