在微信小程序中使用 wx.request
发送请求,并设置 header
的 'Content-Type': 'application/json'
时,确实会导致 PHP 后端无法通过 $_POST
超全局数组直接接收到 JSON 数据。这是因为当 Content-Type
设置为 application/json
时,请求体中的数据是以 JSON 格式发送的,而不是通过标准的表单编码(application/x-www-form-urlencoded
或 multipart/form-data
)发送的。
PHP 的 $_POST
超全局数组是用来接收通过表单编码方式发送的数据的。当 Content-Type
是 application/json
时,PHP 不会自动解析请求体中的 JSON 数据并将其放入 $_POST
数组。相反,你需要手动读取输入流(php://input
),然后使用 json_decode()
函数来解析 JSON 数据。
下面是一个 PHP 后端接收和处理 JSON 数据的示例:
// 获取原始 POST 数据的 JSON 字符串
$json = file_get_contents('php://input');
// 尝试将 JSON 字符串解码为 PHP 关联数组
$data = json_decode($json, true);
// 检查 JSON 解码是否成功
if (json_last_error() === JSON_ERROR_NONE) {
// $data 现在包含了请求体中的 JSON 数据
// 你可以在这里处理这些数据
var_dump($data);
} else {
// JSON 解码失败,返回错误响应
http_response_code(400);
echo json_encode(['error' => 'Invalid JSON']);
}
?>
在这个示例中,file_get_contents('php://input')
用于读取请求体中的原始数据,然后 json_decode()
用于将 JSON 字符串解码为 PHP 关联数组。如果解码成功,你就可以在 $data
变量中访问这些数据了。
确保你的微信小程序请求是正确配置的,特别是 method
应该是 POST
(因为你在发送数据),并且 header
中的 'Content-Type'
设置为 'application/json'
。这样,PHP 后端就能正确地接收到并处理 JSON 数据了。