AJAX参数错误求助:点击Generate按钮返回BAD PARAMETERS
解决点击Generate按钮返回"BAD PARAMETERS"的问题
Hey,我帮你仔细检查了代码,找到了几个导致错误的关键问题,咱们一步步来修复:
问题根源拆解
AJAX参数完全搞反了
你在JS里传递参数时,把name和method的取值弄颠倒了:- HTML里
<input name="type">是用来输入用户名的,但你把它赋值给了method参数 - HTML里
<select name="timezone">是选择生成方式的,但你把它赋值给了name参数
这直接让PHP收到的参数完全不符合校验规则,自然返回"BAD PARAMETERS"。
- HTML里
下拉框默认选项未做校验
下拉框默认显示的是Choose Method,如果用户没选ASCII或Random就点按钮,PHP检测到method不是允许的值,也会触发错误。用户名空值未提前拦截
PHP的校验逻辑要求用户名不能为空,但前端没做提前检查,空值传过去也会触发错误提示。PHP循环里的隐藏bug
原来的PHP代码中,ord($name)是错误的——ord()只能处理单个字符,而$name是整个字符串。你需要遍历每个字符,所以应该用ord($name[$i]),否则生成的PIN码会完全不符合预期。
修复后的完整代码
修改后的JavaScript(增加前端校验+修正参数传递)
$(document).ready(function () { var launchAjax = function () { // 先获取并清洗输入值 var userName = $("input[name=type]").val().trim(); var generateMethod = $("select[name=timezone]").val(); // 前端先做校验,避免无效请求 if (!userName) { alert("请输入你的名字!"); return; } if (generateMethod === "Choose Method") { alert("请选择PIN生成方法!"); return; } // 正确传递参数:name对应用户名,method对应生成方法 $.get( "php/pingen.php", // 去掉末尾的斜杠,避免服务器路径解析问题 { name: userName, method: generateMethod }, function(data){ $("#pin").html(data); } ); }; $("#btn").click(launchAjax); });
修改后的PHP(修复字符处理+优化校验可读性)
header("Content-type: text/plain"); sleep(rand(0,2)); // 模拟慢连接 $name = filter_input(INPUT_GET, "name", FILTER_SANITIZE_STRING); $method = filter_input(INPUT_GET, "method", FILTER_SANITIZE_STRING); // 优化校验逻辑,更易读 $isValidName = !empty($name) && $name !== null; $isValidMethod = in_array($method, ["ASCII", "Random"]); if (!$isValidName || !$isValidMethod) { echo "BAD PARAMETERS"; } else { if ($method === "Random") { echo rand(100001, 999999); } else { $pin = 100001; for ($i = 0; $i < strlen($name); $i++) { // 修复:取当前遍历的单个字符的ASCII值 $pin += ord($name[$i]) ** 3; // 用**3代替三次相乘,代码更简洁 } echo $pin % 1000000; } }
这样修改后,点击按钮前会先检查输入是否合法,参数传递也正确,PHP的字符处理也修复了,应该就能正常生成你想要的PIN码啦!
内容的提问来源于stack exchange,提问作者Sach jot
相关产品推荐
相关产品推荐

