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

为何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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 11:47:32