繁体   English   中英

json_decode在$ _POST上返回NULL

[英]json_decode returns NULL over $_POST

我在用json_decode解决问题时遇到了麻烦。 我收到了通过$ _POST发送的有效json。

这是正在传递的JSON对象,库存变量:

[{"item_name":"Screw Driver","item_desc":"asdasd","item_type":"weapon"},
{"item_name":"Brown Shoes","item_desc":"asdasd","item_type":"footwear"}]

这是html javascript代码。

<form action = "<?php echo $_SERVER['PHP_SELF'];?>" method = "post" accept-charset="UTF-8">
    <input type = "hidden" name = "inv" id = "inv"/>
    <input type = "submit" id = "btn_save" onclick = "saveInventory()" value = "Save"/>
</form>

<script type = "text/javascript">
function saveInventory(){
    var inv = document.getElementById("inv");
    inv.value = inventory;
}
</script>

这是将从隐藏的输入类型中获取json的php脚本

<?php
if(isset($_POST['inv'])){
    $inv = $_POST['inv'];
    var_dump(json_decode($inv,true)); // returns NULL
}
?>

我已经在网络上阅读了很多json_decode问题,但是其中大多数都具有关于json_decode返回null的不同问题。 任何人都可能发现这里出了什么问题? 谢谢。

看来您的inventory变量是对象的JavaScript数组,而不是JSON字符串。 因此,您需要将其转换为JSON以将其存储在HTML输入值中:

function saveInventory(){
    var inv = document.getElementById("inv");
    inv.value = JSON.stringify(inventory); // convert to JSON string
}
<?php
    if(isset($_POST['inv'])){
        $json=json_decode($_POST['inv']);
        foreach($json as $j){
            echo "NAME: ".$j->{"item_name"};
            echo "<hr/>";
        }
    }
?>
<form method="post" action="<?php echo $_SERVER['SCRIPT_NAME'];?>">
    <input type="text" name='inv' value='[{"item_name":"Screw Driver","item_desc":"asdasd","item_type":"weapon"},{"item_name":"Brown Shoes","item_desc":"asdasd","item_type":"footwear"}]'/>
    <input type="submit" value="SEND"/>
</form>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM