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

无法通过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();

额外排查建议

  1. 打开浏览器控制台(F12),查看Network标签里的请求详情,确认响应内容是否为合法JSON。
  2. 测试环境下,可在后端开头添加error_reporting(E_ALL); ini_set('display_errors', 1);,查看是否有PHP报错(生产环境需关闭)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:03:32