You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP脚本返回值异常:计算器始终返回0问题求助

计算器PHP计算结果始终为0的问题解决

问题说明

开发的计算器中,PHP代码的$erg变量始终返回初始值0,无法得到正确计算结果。AJAX请求已获取到readyState 4的成功状态,但PHP无法正确处理传递的参数,计算结果无法显示在计算器屏幕及JS控制台中。

错误原因及修正方案

1. 参数命名不匹配

JS中AJAX传递的参数键名都是number,但PHP中尝试获取number1和number2,导致PHP无法读取到正确的两个数值。

2. GET请求参数传递方式错误

GET请求的参数需要拼接在URL末尾,而非通过xhr.send()传递,否则参数不会被PHP接收。

3. 多位数输入逻辑缺陷

原JS代码中,点击数字时number1和number2会被直接覆盖为当前点击的单个字符,无法处理多位数(比如输入"12"会变成最后点击的"2")。

修正后的代码

JavaScript部分(JS_TR_neu.js)

let number1 = "";
let number2 = "";
let operator = "";

// 绑定运算符点击事件
document.querySelectorAll(".operator").forEach(element => {
    element.addEventListener("click", () => {
        document.querySelector("#eingabefeld").value += element.innerHTML;
        operator = element.innerHTML;
    })
})

// 绑定数字点击事件,支持多位数输入
document.querySelectorAll(".number").forEach(element => {
    element.addEventListener("click", () => {
        document.querySelector("#eingabefeld").value += element.innerHTML;
        if (operator === "") {
            number1 += element.innerHTML; // 拼接字符实现多位数
            console.log("Zahl1: ", number1);
        } else {
            number2 += element.innerHTML;
            console.log("Zahl2: ", number2);
        }
    })
})

// 等号点击事件,修正AJAX请求逻辑
document.querySelector("#orangeZeichen").addEventListener("click", () => {
    let xhr = new XMLHttpRequest();

    xhr.onreadystatechange = function() {
        if (xhr.readyState === 4 && this.status === 200) {
            console.log("readystate suceed: " + this.readyState);
            var response = JSON.parse(xhr.responseText);
            console.log("Response: ", response);
            document.querySelector("#eingabefeld").value += response;
        }
    }

    // 将参数拼接到GET请求的URL末尾
    let url = "Taschenrechner.php?number1=" + encodeURIComponent(number1) + 
              "&number2=" + encodeURIComponent(number2) + 
              "&operator=" + encodeURIComponent(operator);
    xhr.open("GET", url, true);
    xhr.send(null); // GET请求send方法传null
})

PHP部分(Taschenrechner.php)

<?php
// 先检查参数是否存在,避免未定义索引错误
$number1 = isset($_GET["number1"]) ? $_GET["number1"] : 0;
$number2 = isset($_GET["number2"]) ? $_GET["number2"] : 0;
$operator = isset($_GET["operator"]) ? $_GET["operator"] : "";

$erg = 0;
switch($operator){
    case "+":
        $erg = (float)$number1 + (float)$number2;
        break;
    case "-":
        $erg = (float)$number1 - (float)$number2;
        break;
    case "*":
        $erg = (float)$number1 * (float)$number2;
        break;
    case "/":
        // 避免除数为0的错误
        $erg = (float)$number2 !== 0 ? (float)$number1 / (float)$number2 : "Error";
        break;
}
echo json_encode("=".$erg);
?>

额外优化说明

  • 增加了参数存在性检查,避免PHP抛出未定义索引的警告。
  • 使用switch语句替代多个elseif,代码更简洁。
  • 增加了除数为0的错误处理,避免计算异常。

内容的提问来源于stack exchange,提问作者grotivanhelden

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 00:00:25