无法通过XMLHttpRequest获取PHP $_REQUEST数据问题求助
问题排查与修复方案
1. 前端GET请求参数拼接错误
你的请求URL里第二个参数用了?,这会导致input_text2无法被PHP正确识别(URL中只有第一个?是参数分隔符,后续的?会被当作参数值的一部分),必须用&来拼接多个GET参数。
2. 前端变量未声明(隐式全局变量)
input_text、input_text2、mark_required都没有用let/var声明,会变成全局变量,容易和其他代码冲突引发意外问题。
3. 前端参数未编码
如果输入内容包含&、=、空格这类特殊字符,直接拼接会破坏URL结构,必须用encodeURIComponent对参数值进行编码。
4. 后端未定义$answer变量
你在$output['string']=$inputtext."=".$answer;里用了$answer,但这个变量根本没定义,会导致PHP报错,甚至让JSON输出异常(虽然状态码显示200,但PHP的错误可能被抑制,最终导致前端解析JSON后出现null)。
修正后的前端代码
function markRequired() { // 声明变量,避免隐式全局 let input_text = document.getElementById('input-text').value; let input_text2 = document.getElementById('input-text2').value; let mark_required; // 提前声明变量 let xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { try { // 加try-catch,避免JSON解析失败导致后续代码中断 var j = JSON.parse(this.response); mark_required = j.answer; displayMark(); } catch(e) { console.error('JSON解析失败:', e); console.log('响应内容:', this.response); } } }; // 用&拼接参数,并用encodeURIComponent编码特殊字符 let url = `${markURL}?input_text=${encodeURIComponent(input_text)}&input_text2=${encodeURIComponent(input_text2)}`; xhttp.open("GET", url); xhttp.send(); }
修正后的后端代码
<?php header("Access-Control-Allow-Origin: *"); header("Content-type: application/json"); require('functions.inc.php'); // 增加参数存在性检查,避免Undefined索引错误 $inputtext = $_REQUEST['input_text'] ?? ''; $furthertext = $_REQUEST['input_text2'] ?? ''; $totalsofar = getTotal($inputtext, $furthertext); // 替换未定义的$answer为实际存在的变量,比如$totalsofar $output['string'] = $inputtext . "=" . $totalsofar; $output['answer'] = $totalsofar; // 确保输出合法JSON echo json_encode($output); exit();
额外排查建议
- 打开浏览器控制台(F12),查看
Network标签里的请求详情,确认响应内容是否为合法JSON。 - 测试环境下,可在后端开头添加
error_reporting(E_ALL); ini_set('display_errors', 1);,查看是否有PHP报错(生产环境需关闭)。
内容的提问来源于stack exchange,提问作者zmitchell244
相关产品推荐
相关产品推荐

