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

两个文本框传值到AJAX后PHP端json_decode返回null如何解决

问题原因与排查解决方法

核心问题定位

你前端AJAX请求里直接把JS对象赋值给data1,jQuery处理POST请求时会自动把整个data参数序列化为application/x-www-form-urlencoded格式的表单参数,此时传递到后端的$_POST['data1']不是合法JSON字符串,而是类似[object Object]的非标准格式内容,所以json_decode直接返回null。

排查步骤

  • 第一步打印后端拿到的原始值验证:执行var_dump($_POST['data1']);,可确认输出内容不符合JSON格式要求
  • 第二步用json_last_error_msg()打印解码错误原因,常见返回为Syntax error,验证是输入字符串不满足JSON格式规范导致解码失败

两种修复方案

方案1:前端手动转JSON字符串(适配原有后端解码逻辑)

修改前端AJAX的data参数,把data1对应的值用JSON.stringify()转成标准JSON字符串:

function myAjax() 
{
 var username = $("#username").val();
 var orderid = $("#orderid").val();
      $.ajax({
           type: "POST",
           url: 'jumper.php',
           data:{ data1: JSON.stringify({"username": username, "orderid": orderid})},
           datatype: 'json',
           success:function(html) 
           { 
             document.getElementById("test").innerHTML = html;
           }
      });
}

后端原有json_decode($_POST['data1'])逻辑不需要修改即可正常解析。如果你的PHP环境开启了magic_quotes_gpc配置,需要先调用stripslashes($_POST['data1'])去除转义引号再解码。

方案2:直接用表单格式传值(更简单,无需JSON编解码)

你当前的参数结构没有复杂嵌套,完全没必要用JSON传递,直接传表单键值对即可:
前端修改data参数:

data:{username: username, orderid: orderid},

后端直接取值,不需要调用json_decode:

$username = $_POST['username'];
$orderid = $_POST['orderid'];

额外注意

不要直接echo json_decode的返回值,如果解析后是对象/数组,需要用var_dump()或者print_r()打印,直接echo对象会触发PHP报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:57:03