创建JSON obj并通过jQuery AJAX将其发送到PHP并响应它


Make JSON obj and send it via jQuery AJAX to PHP and respond to it

我现在正在研究这个问题大约 2-3 个小时,我找不到我做错的地方。这是我的jQuery,它将构建一个对象:

var data = {cat:[],count:[],size:[],type:[],print:[]};
$("#Cat-list option").each(function()
    {data.cat.push($(this).val());});
$("#Count-list option").each(function()
    {data.count.push($(this).val());});
$("#Size-list option").each(function()
    {data.size.push($(this).val());});
$("#Print-list option").each(function()
    {data.print.push($(this).val());});
$("#Type-list option").each(function()
    {data.type.push($(this).val());});

在此之后,我将有一个名为 data 的对象。 当我通过var jsonString=JSON.stringify(data);将 OBJ 转换为 JSON 时,它会给我这样的内容:

{
    "cat":["Cart Visit","Bag","Envelope","Tracket","Brosur"],
    "count":["1000","2000","4000","5000","?????"],
    "size":["S","M","L","X"],
    "type":["?? ??","??? ? ??","????"],
    "print":["????","???????","????"]
}

然后我使用 jQuery Ajax 将 jsonstring 发送到我的 php 文件,如下所示:

$.ajax({
    type: "POST",
    url: 'update_db.php',
    data: jsonString,
    contentType: "application/json; charset=utf-8",
    success:
    function(result) {      
        $( "#alert").html( result );
    }               
});

最后,我尝试使用PHP脚本接收数据。 我不知道如何为此获取数据 我尝试使用"jsonstring"和"data":

$json = json_decode( $_POST['jsonstring']);
$data = json_decode( $_POST['data']);
var_dump($json);
var_dump($data);

但两者都是"空"。我做错了什么?

当你将JSON(application/json)发布到PHP时,它不会自动被解析(不像传统的编码,application/x-www-form-urlencoded)。 您需要手动读取它:

$jsonText = file_get_contents('php://input');
$data = json_decode($jsonText)

你得到NULL,因为这是json_decode()返回无效输入的内容($_POST为空,所以没有什么可解码的)。

P.S. - php://input 是由 POST/PUT/whatever 提交的原始数据的特殊文件名,无论使用何种编码。 有关完整文档,请参阅 php.net 手册。