修复JS通过GET传值返回ok响应的PHP代码问题
代码问题排查
你的PHP代码无法正常工作,核心问题有4个:
- 响应格式和前端预期不匹配:前端逻辑是判断纯文本响应
this.responseText == "ok",但你设置了JSON响应头,还对返回值做json_encode处理,最终输出的是带双引号的"ok",和前端预期的无引号纯文本ok不符。 - 裸字符串语法问题:代码里的
no、ok都没有加字符串引号,PHP会将其识别为未定义常量,运行时会抛出警告,警告内容会混入响应,导致返回内容不是预期的纯文本。 - 无效的条件判断:校验AJAX请求的if语句末尾多写了分号,相当于判断后执行空语句,这段校验逻辑完全不生效。
- 多余的响应拼接逻辑:当前需求只需要正确接收到参数就返回
ok,现有错误数组拼接的逻辑会在参数异常时返回额外内容,不符合前端判断逻辑。
修复后可直接运行的代码
<?php // 返回纯文本响应,和前端判断逻辑匹配 header('Content-Type: text/plain'); // 校验GET传入的answer参数是否存在且非空 if (isset($_GET['answer']) && trim($_GET['answer']) !== '') { // 后续可在此处补充答案校验、用户计分的业务逻辑 echo 'ok'; } else { // 参数异常时返回对应错误标识即可 echo 'param_missing'; } ?>
补充说明
- 如果你后续需要改用JSON格式返回结构化数据(比如同时返回得分、正确答案提示),需要同步修改前端JS逻辑,先调用
JSON.parse(this.responseText)解析响应后,再判断对应字段的值,不能直接和字符串ok做相等判断。 - 不要依赖
HTTP_X_REQUESTED_WITH头判断是否为AJAX请求,原JS代码没有手动设置这个请求头,跨域场景、部分浏览器环境下这个头不会自动携带,会导致校验不通过。
内容的提问来源于stack exchange,提问作者Ruse Yee
相关产品推荐
相关产品推荐

