为何PHP无法接收AJAX发送的POST请求?求排查方案
你遇到的问题主要有两处关键问题:AJAX请求的参数书写错误,以及请求内容类型导致PHP无法正常解析POST数据。
1. 先修正AJAX中的语法错误
你的代码里重复声明了data属性——把data: 'json'改成dataType: 'json'就好。这里要区分:data是你要发送给服务器的请求数据,而dataType是告诉jQuery你期望服务器返回的响应格式。错误的重复赋值会直接覆盖掉之前的{postID: postID},导致实际发送的是字符串'json',这自然传不对参数。
修正后的AJAX代码片段:
$.ajax({ type: 'POST', url: '../edit.php', data: {postID : postID}, // 如果不需要JSON格式的请求体,可以直接删掉下面这行contentType配置 // contentType: 'application/json; charset=utf-8', dataType: 'json', // 这里改为dataType,而非data cache: false, success: function(response) { window.location.href="../edit.php" }, error: function(err){ console.log(err) } })
2. 处理PHP获取POST数据的两种方案
方案一:使用默认表单编码(推荐,更简单)
如果你删掉contentType: 'application/json; charset=utf-8',jQuery会默认用application/x-www-form-urlencoded格式发送数据。这种格式是PHP默认支持解析的,你原来的PHP代码不需要任何改动,就能正常通过$_POST["postID"]获取参数。
方案二:若坚持使用JSON格式发送请求
如果一定要发送JSON格式的数据,PHP无法直接通过$_POST读取——因为PHP默认只会解析表单编码的请求体。这时候需要手动读取请求体并解析JSON:
修改后的PHP代码:
<?php // 读取JSON格式的请求体内容 $rawJson = file_get_contents('php://input'); // 将JSON转为关联数组 $requestData = json_decode($rawJson, true); if(isset($requestData["postID"])){ echo $requestData["postID"]; } ?>
另外补充一点:你的AJAX请求成功后直接跳转到edit.php,这个跳转是GET请求,不会携带之前POST的参数。如果跳转后需要用到这个postID,可以把它拼在URL里(比如window.location.href="../edit.php?postID=" + postID),或者在AJAX对应的后端代码里把postID存入Session,跳转后从Session中读取。
内容的提问来源于stack exchange,提问作者ShengXue

