我无法通过javascript中来自json的PHP访问信息。
我使用localstorage来保存一些临时数据:
var tbRomaneio = localStorage.getItem("tbRomaneio");// Recupera os dados armazenados
tbRomaneio = JSON.parse(tbRomaneio); // Converte string para objeto
if(tbRomaneio == null) { // Caso não haja conteúdo, iniciamos um vetor vazio
tbRomaneio = new Array();
}
//Item
var medida = JSON.stringify({
comprimento : medidaComprimento,
largura : medidaLargura,
token : token.toString()
});
tbRomaneio.push(medida);
localStorage.setItem("tbRomaneio", JSON.stringify(tbRomaneio));
我在javascript中发布的代码:
$.post('/pedido/salva-romaneio', {itens: localStorage.getItem("tbRomaneio")} )
.done(function(data) {
//ok
})
到目前为止一切顺利。问题出在PHP中,当我读取这些信息时,它会返回错误。
这是我的PHP代码:
<?php
$itensRomaneio = json_decode($_POST['itens'], true);
print_r($itensRomaneio);
?>
Array
(
[0] => {"comprimento":"230","largura":"54","token":"1495719950761"}
)
当我读取数组时,我无法访问该信息,它会出现以下错误:
//Array
for($i = 0; $i < count($itensRomaneio); $i++) {
echo $itensRomaneio[$i]->token;
}
Error:
<p>Severity: Notice</p>
<p>Message: Trying to get property of non-object
如果我尝试以这种方式使用它,它只会让我回答:
//Array
for($i = 0; $i < count($itensRomaneio); $i++) {
echo $itensRomaneio[$i]['token'];
}
Return only this:
" { "
如果我给出print_r,则会显示:
print_r($itensRomaneio[$i]);
//show
{"comprimento":"230","largura":"54","token":"1495719950761"}
发生了什么事?
答案 0 :(得分:2)
您在每个ko.applyBindings()
上调用JSON.stringify()
,然后将其推送到medida
阵列。所以你需要解码每个元素。
tbRomaneio
但更好的解决方案是不对每个项目进行编码,只对整个数组进行编码。
foreach ($itensRomaneio as $iten) {
$iten = json_decode($iten);
echo $iten->token;
}
然后在PHP中,如果你想得到一个对象数组而不是关联数组,你不应该使用var medida = {
comprimento : medidaComprimento,
largura : medidaLargura,
token : token.toString()
};
tbRomaneio.push(medida);
localStorage.setItem("tbRomaneio", JSON.stringify(tbRomaneio));
作为true
的第二个参数。
答案 1 :(得分:1)
尝试:
for($i = 0; $i < count($itensRomaneio); $i++) {
$values = json_decode($itensRomaneio[$i]);
echo $values->token;
}
答案 2 :(得分:0)
You $ itensRomaneio是一个json字符串数组。您需要在访问令牌属性之前解码它们。
array_walk($itensRomaneio, function($v) {
echo json_decode($v)->token;
}