制作JSON obj并通过jQuery AJAX将其发送给PHP并对其进行响应

时间:2013-11-06 17:11:34

标签: javascript php jquery ajax json

我现在正在研究这个问题大约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);

但两者都是“NULL”。 我做错了什么?

1 个答案:

答案 0 :(得分:1)

当您将JSON(application/json)POST到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 /无论使用何种编码提交的原始数据的特殊文件名。有关完整文档,请参阅the php.net manual