0

我现在正在为此工作大约 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 的对象。当我将 obj 转换为 JSON 时,var jsonString=JSON.stringify(data);它给了我这样的信息:

{
    "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”。我究竟做错了什么?

4

1 回答 1

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是空的,所以没有什么要解码的)。

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

于 2013-11-06T17:14:44.490 回答