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

XMLHttpRequest查询字符串正确但PHP提示Undefined array key错误

问题原因

你遇到的报错是两个传参逻辑错误共同导致的:

  1. 参数位置不匹配:你将notification_action拼在了requestURL的查询串(?后面的部分),这部分属于GET参数,PHP的$_POST超全局只能读取POST请求体里的参数,完全拿不到URL里的查询参数。
  2. POST参数拼接错误:你往parameters变量(也就是最终POST请求体的内容)追加notification_action时,只写了参数值,没有加参数名:
// 你的原错误写法
parameters += encodeURIComponent("mark_notification_as_read") + "&";

拼接后parameters的开头只有值mark_notification_as_read&,没有notification_action=前缀,所以POST请求体里根本不存在这个键,自然无法被$_POST读取。
而notification_id是从表单隐藏域里读取,拼接的时候带了参数名,放在POST请求体里,所以可以正常被$_POST接收。


解决方法

以下两种方案二选一即可:

方案1(推荐,符合POST请求规范):将所有参数放在POST请求体中

修改switch代码块中后两个分支的逻辑,删掉URL里的查询串,同时补全POST参数的键名:

case "mark_notification_as_read":
    requestURL = "../php/query_notifications.php";
    parameters += "notification_action=" + encodeURIComponent("mark_notification_as_read") + "&";
    getCurrentElementValue = true;
break;
case "delete_notification":
    requestURL = "../php/query_notifications.php";
    parameters += "notification_action=" + encodeURIComponent("delete_notification") + "&";
    getCurrentElementValue = true;
break;

修改后PHP原有代码不需要改动,即可正常通过$_POST读取参数。

方案2:保留URL传参的写法,修改PHP读取参数的方式

如果要保留notification_action放在URL查询串的逻辑,PHP改用$_GET或者$_REQUEST读取即可:

// 方式1:读取URL里的GET参数
$action = $_GET["notification_action"];
// 方式2:$_REQUEST可以同时读取GET和POST的参数
// $action = $_REQUEST["notification_action"];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:45:04