我现在正在研究这个问题大约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”。 我做错了什么?
答案 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。