2017-07-24 61 views
0

我发送php数组为json格式,但我无法解码值。 这里是我做的阵列json解码错误

$ads = $atts['ads']; 
    if (sizeof($ads) > 0) { 
    foreach($ads as $social_item) { 
     $sdbr = $social_item['sidebar']; 
     $pno = $social_item['no']; 
     $out[$sdbr] = $pno; 
    } 
} 

哪个输出

array (
    'Full width ad 1' => 2, 
    'sidebar-1' => 3, 
) 

现在我有JSON编码它

$myJSON = json_encode($out); 

的JSON格式值{"Full width ad 1":2,"sidebar-1":3} 然后我将其通过数据属性值

echo "<div data-ad = '$myJSON' class='ash_loadmore'><span>LOAD MORE</span> 
</div>"; 

,我已经得到了

$ad = $_POST['ad']; 
array (
    'Full width ad 1' => '2', 
    'sidebar-1' => '3', 
) 

所以,现在时间解码输出

$out = json_decode($ad,TRUE); 
    var_dump($out); // Returns NULL although the array value is present 

但如果我把JSON格式的数据,它工作正常

$out = json_decode('{"Full width ad 1":2,"sidebar-1":3}',TRUE); 
    var_dump($out); 

我的了在json编码之前怀疑数组array(2) { ["Full width ad 1"]=> int(2) ["sidebar-1"]=> int(3) }值是int但我的价值为stringarray(2) { ["Full width ad 1"]=> string(1) "2" ["sidebar-1"]=> string(1) "3" }

我在做什么错?

+0

你说'$ ad = $ _POST ['ad'];'?你如何传递数据?通过ajax?因为'data-ad'永远不会通过正常的表单发布(刷新页面)。所以如果你使用ajax,那么你的html中也要添加这个代码 –

+3

如果'$ ad'已经输出'array(...)',那不是JSON了。 – deceze

+0

我使用ajax发送,它在wordpress环境中 –

回答

4

在此步骤之后:

$ad = $_POST['ad']; 
array (
    'Full width ad 1' => '2', 
    'sidebar-1' => '3', 
) 

你在输出,这已经是一个php阵列看到,所以任何JSON-解码方法将失败(这是没有JSON)。

可以与阵列工作的时候了,这取决于你想要做什么;)

+0

无法使用json编码或序列化将数组值发送到服务器 –

+0

@SadiaMehjabin它不是要发布到服务器,而是从传入的POST接收数据(请参阅$ _POST Supervaraibale)。所以,脚本已经收到数据,所以,数据是一个php数组,并且可以马上使用它); – Paladin

1

我认为,把序列化JSON的HTML属性可能导致你一个问题。

为什么它会导致这个问题的原因是因为你的JSON可能包含像和字符它的输出,所以它可能会破坏你的HTML语法。

我猜你要发送JSON通过AJAX回一些PHP脚本,所以从损坏的HTML元素阅读JSON的售价可能无效JSON数据。

解决这一问题的方法是使用...

$myJSON = htmlentities($str, ENT_QUOTES);

...在将其输出到HTML之前。这将只编码引号字符。

你也应该在你的PHP端点使用其解码...

$ad = html_entity_decode($ad, ENT_QUOTES); 
$out = json_decode($ad,TRUE); 

希望这有助于。

+0

谢谢你的建议,我申请了它,但没有运气 –

+0

没问题。正如@Paladin所说,如果你的变量$ ad已经有一个数组,那么就不需要解码JSON了:)如果那些输入到字符串的整数会给你带来麻烦,那可能是你的整数在AJAX调用期间在你的JS中输入了。您可以在浏览器的网络工具中轻松验证它。 –