javascript - 通过 .ajax() 发布 JSON 数组后无法读取 PHP 中的 NULL 变量

标签 javascript php json ajax jsonencoder

我和许多其他人一样遇到了问题,在通过 ajax() post 发送 PHP 数组变量后能够读取它。 Ajax成功并显示返回的数据,该数据为NULL。我已经彻底研究了这个 JSON/PHP 问题的 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 编码格式,而不是 JSON。

或者您可以保留 data: 选项不变,但去掉 contentType: 选项,然后您应该使用

$data = json_decode($_POST['a_arr'], true);

关于javascript - 通过 .ajax() 发布 JSON 数组后无法读取 PHP 中的 NULL 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56192800/

相关文章:

javascript - 上传图片并重定向到新页面,无需刷新

javascript - 使用单个 jQuery 脚本更新多个 DIV - 标签

javascript - 动态文本框生成

javascript - 立即访问 Angular 4 查询参数?

php - 如何在服务器上部署和运行一个 zend 项目?

php - 使用 AJAX 发送两个变量(我有一个正在工作,但需要两个)

android - 如何将一个 API 重放的 JSON 中的值放到另一个 API post 方法的主体中?

javascript - 格式化 JSON 时遇到问题

javascript - 使用 Javascript 循环遍历并从 JSON 表示法中提取项目值

Javascript错误: Either BOF or EOF is True,或当前记录已被删除