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

Symfony中$request->getContent()返回非JSON格式如何获取JSON内容?

问题原因

jQuery的AJAX请求中,当data参数传入普通JS对象时,会默认将其序列化为application/x-www-form-urlencoded格式的键值对字符串,哪怕手动设置了contentType: "application/json"也不会自动转换为JSON格式,这就是你拿到test=hallo&test2=hallo格式内容的原因。


方案1:前端修正(优先推荐,从根源解决问题)

直接在前端将要发送的数据手动序列化为JSON字符串,同时调整数据结构为你需要的数组格式即可:

// 构造目标结构的JS数据
const postData = [
    {"test": "hallo"},
    {"test2": "hallo2"}
];
$.ajax({
    url: "/example/example",
    method: "POST",
    // 手动序列化为JSON字符串
    data: JSON.stringify(postData),
    contentType: "application/json; charset=utf-8",
    dataType: "json"
    // 其余配置保持不变
})

修改完成后,在Symfony控制器中直接调用$request->getContent()就能拿到你需要的JSON字符串,要转为PHP数组使用的话可以调用json_decode($request->getContent(), true)。


方案2:后端兼容处理(前端代码无法修改时使用)

如果前端不能调整代码,可以直接解析当前拿到的表单参数,自行拼装为目标格式:

// 从请求中获取所有表单参数的关联数组
$params = $request->request->all();
$targetFormatData = [];
foreach ($params as $key => $value) {
    $targetFormatData[] = [$key => $value];
}
// 转为JSON字符串可调用json_encode
$targetJson = json_encode($targetFormatData, JSON_UNESCAPED_UNICODE);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:36:04