AJAX请求中URL传递的PHP参数无法获取?求解决方法
解决AJAX POST请求中PHP读不到URL参数的问题
嗨,我来帮你捋捋这个问题~你现在遇到的情况是:AJAX发POST请求时把p=add放在URL里,但PHP用$_GET['p']读不到这个参数。咱们一步步来分析和解决:
先搞懂背后的逻辑
理论上,不管你发的是GET还是POST请求,URL里带的查询参数(比如?p=add)都是可以通过$_GET获取的。但读不到大概率是这两个原因:要么服务器的URL重写规则把参数给过滤掉了,要么你可以换个更稳妥的参数获取方式,或者调整参数的传递位置。
快速排查小技巧
你可以先在system_setting.php里加一行调试代码:
var_dump($_GET, $_REQUEST);
然后触发AJAX请求,看看输出里有没有p这个参数。如果$_GET里没有但$_REQUEST里有,那就是服务器配置的问题;如果都没有,那可能是URL路径不对或者被路由拦截了。
两种靠谱的解决方法
方法1:换用$_REQUEST获取参数
$_REQUEST是PHP里的一个超级全局变量,它包含了$_GET、$_POST和$_COOKIE里的所有参数(默认配置下是包含GET和POST的)。你可以把PHP代码改成这样:
$page = isset($_REQUEST['p']) ? $_REQUEST['p'] : '';
这样不管参数是在URL里还是POST请求体里,都能读到。
方法2:把所有参数放到POST请求体里(更规范)
既然你用的是POST请求,更符合规范的做法是把所有参数都放在请求的data里,而不是拆分到URL和请求体中。这样不仅逻辑更清晰,还能避免URL重写带来的问题。
修改你的AJAX代码:
$.ajax({ type:"POST", url:"system_setting.php", data: { p: "add", username: username, password: password, nickname: nickname, authority: authority }, success:function(data){ viewData(); } });
然后PHP代码改成用$_POST获取:
$page = isset($_POST['p']) ? $_POST['p'] : '';
这种方式是POST请求传递数据的最佳实践,推荐你优先用这个方法~
内容的提问来源于stack exchange,提问作者Elvis Fan
相关产品推荐
相关产品推荐

