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
相关产品推荐
相关产品推荐

