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