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

Ajax拉取第三方JSON后POST到PHP无法被json_decode解析怎么解决

跨端传递JSON数据到PHP的问题修复方案

问题根因

  • 第一个请求的dataType:'json'会让jQuery自动把第三方返回的JSON字符串解析为JS对象,你第二个AJAX直接把这个对象传给data参数时,jQuery默认会按application/x-www-form-urlencoded格式把对象转为键值对字符串,不是RAW JSON格式
  • 你在PHP中用php://input读取的是表单格式的字符串,自然无法通过json_decode解析

修复方案(二选一即可)

方案1:前端发送RAW JSON格式,适配现有PHP接收逻辑

修改前端第二个AJAX请求的配置,指定内容类型为JSON,同时把JS对象转为JSON字符串发送:

<script>
$("#diary").click(function(){        
      $.ajax({
      type:'get',
      // 注意你原代码的url漏了闭合引号,这里补上
      url:'https://example.com',
      data:{

      },
      dataType:'json',
      success:function(result){
          console.log(result);
            $.ajax({
               type: "POST",
               url: "dd.php",
               // 把JS对象转为JSON字符串
               data: JSON.stringify(result),
               // 指定发送的内容类型为JSON
               contentType: 'application/json',
               // 如果你的PHP返回的不是JSON格式,建议删除该行配置,避免jQuery解析报错
               // dataType: "json",
               success: function (msg) {
                   console.log(msg);
               }
           });

      }
    });
});  
</script>

现有PHP代码不需要修改,即可正常读取解析JSON内容。

方案2:不修改前端发送逻辑,调整PHP接收逻辑

如果不想调整前端代码,jQuery默认发送的表单格式数据可以直接通过$_POST全局变量读取,不需要读取php://input:

<?php
// 直接读取POST表单格式的参数,不需要json_decode
print_r($_POST);
// 如果需要把整份数据转成JSON存入数据库,直接调用json_encode($_POST)即可
?>

验证方法

打开浏览器开发者工具的「网络」面板,找到提交到dd.php的请求,查看「请求载荷」确认发送的内容格式,同时查看「响应」内容确认PHP返回的结果是否符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:06:02