在通过 .ajax() 发布 JSON 数组后无法读取 PHP 中的 NULL 变量
Cannot read NULL variable in PHP after posting JSON array through .ajax()
我和许多其他人一样遇到了一个问题,在通过 ajax() post 发送后能够读取 PHP 数组变量。 Ajax成功,显示返回数据,为NULL。我已经针对这个 JSON/PHP 问题彻底研究了 SO 解决方案,并且我的问题描述显示了 'almost' 目前为止关于 SO 的每个解决方案。
在 PHP 方面我已经尝试过:
$data = json_decode(file_get_contents('php://input'), true);
var_dump($data);
(跳过 $HTTP_RAW_POST_DATA(已弃用)因为它等于 file_get_contents('php://input')
还有:
$data = json_decode($_POST["a_arr"], true);
我已经尝试使用 sed 命令清除 UTF-8 BOM
sed '1s/^\xEF\xBB\xBF//' < index.html > index2.html
我的 .ajax() 看起来像这样:
$.ajax ({
url:"file.php",
method:"post",
contentType: "application/json; charset=utf-8",
data: { a_arr : JSON.stringify(arr) },
})
.done(function(response){
$("#status").html(response);
});
在 Javascript 这边是我的数组:
var arr = [{"name":_name, "phone":_phone, "email":_email, "repname":repname, "repnumber":repnumber, "office":office}];
ajax_post(arr);
我已经检查以确保没有 JSON 格式错误,下面成功地向我展示了一个有效的 JSON 格式数组:
var data_arr = JSON.stringify(arr);
document.getElementById("status").innerHTML = data_arr;
您需要更改为:
data: JSON.stringify(arr),
当您将对象指定给 data:
选项时,它会将其转换为 URL-encoded 格式,而不是 JSON。
或者您可以保留 data:
选项,但去掉 contentType:
选项,然后您应该使用
$data = json_decode($_POST['a_arr'], true);
我和许多其他人一样遇到了一个问题,在通过 ajax() post 发送后能够读取 PHP 数组变量。 Ajax成功,显示返回数据,为NULL。我已经针对这个 JSON/PHP 问题彻底研究了 SO 解决方案,并且我的问题描述显示了 'almost' 目前为止关于 SO 的每个解决方案。
在 PHP 方面我已经尝试过:
$data = json_decode(file_get_contents('php://input'), true);
var_dump($data);
(跳过 $HTTP_RAW_POST_DATA(已弃用)因为它等于 file_get_contents('php://input')
还有:
$data = json_decode($_POST["a_arr"], true);
我已经尝试使用 sed 命令清除 UTF-8 BOM
sed '1s/^\xEF\xBB\xBF//' < index.html > index2.html
我的 .ajax() 看起来像这样:
$.ajax ({
url:"file.php",
method:"post",
contentType: "application/json; charset=utf-8",
data: { a_arr : JSON.stringify(arr) },
})
.done(function(response){
$("#status").html(response);
});
在 Javascript 这边是我的数组:
var arr = [{"name":_name, "phone":_phone, "email":_email, "repname":repname, "repnumber":repnumber, "office":office}];
ajax_post(arr);
我已经检查以确保没有 JSON 格式错误,下面成功地向我展示了一个有效的 JSON 格式数组:
var data_arr = JSON.stringify(arr);
document.getElementById("status").innerHTML = data_arr;
您需要更改为:
data: JSON.stringify(arr),
当您将对象指定给 data:
选项时,它会将其转换为 URL-encoded 格式,而不是 JSON。
或者您可以保留 data:
选项,但去掉 contentType:
选项,然后您应该使用
$data = json_decode($_POST['a_arr'], true);