Json编码不起作用

时间:2016-09-26 16:27:47

标签: javascript php json

我想将一个php数组编码为JSON,所以我可以将它作为一个属性传递给onclick(),这就是为什么我需要htmlspecialcharts;

然后在js函数中我试图使用JSON.parse将其转换为js对象,以便我可以使用我的数组的数据。

但我无法解析它,因为我从编码中得到的语法不正确

最初的php数组是:

array (size=3)
  0 => string 'Bleu' (length=4)
  1 => int 1
  2 => string 'XL' (length=2)

我在它上面使用了htmlspecialchars(json_encode()) 我需要得到的结果是:

 jsonTab = '["Bleu",1,"XL"]';

但是在编码后我得到:

Bleu,1,XL

我不知道为什么编码不能正常工作......

代码php我用这个产品的每种颜色的大小来创建php数组:

$couleurs = $pdo ->getCouleurProduit($id);
     $nbCouleur = count($couleurs);
     $t = 1;
         foreach ($couleurs as $uneCouleur)
         {

             $taille = $pdo ->getTaille($id,$uneCouleur[0]); // renvoie les taille de la couleur
             $nbTaille = count($taille);                     // renvoie le bombrede taille n0 = 1


             ${'couleur'.$t} = array($uneCouleur[0]);       // definie une tableaux nomé "couleurx" avec pour  premier element le libelle de la couleur
             array_push(${'couleur'.$t}, $nbTaille);        // ajoute en second element au tableaux "couleurx" le nombre de taille pour la couleur 

             for ($i = 0; $i < $nbTaille;  $i++ )           // tant que i est inferieur au nombre de taille 
             {
                 array_push(${'couleur'.$t}, $taille[$i][0]); // on ajoute au tableaux "couleurx" le libelle (a [0]) de chaque taille [i] du tableaux $taille

             }
             ${'cl'.$t} = htmlspecialchars(json_encode(${'couleur'.$t})); //on creer une variable clx qui prend la valeur encoder en json du tableau "couleurx" actuel
             $t++;                                                          

         }$couleurs = $pdo ->getCouleurProduit($id);
     $nbCouleur = count($couleurs);
     $t = 1;
         foreach ($couleurs as $uneCouleur)
         {

             $taille = $pdo ->getTaille($id,$uneCouleur[0]); // renvoie les taille de la couleur
             $nbTaille = count($taille);                     // renvoie le bombrede taille n0 = 1


             ${'couleur'.$t} = array($uneCouleur[0]);       // definie une tableaux nomé "couleurx" avec pour  premier element le libelle de la couleur
             array_push(${'couleur'.$t}, $nbTaille);        // ajoute en second element au tableaux "couleurx" le nombre de taille pour la couleur 

             for ($i = 0; $i < $nbTaille;  $i++ )           // tant que i est inferieur au nombre de taille 
             {
                 array_push(${'couleur'.$t}, $taille[$i][0]); // on ajoute au tableaux "couleurx" le libelle (a [0]) de chaque taille [i] du tableaux $taille

             }
             ${'cl'.$t} = htmlspecialchars(json_encode(${'couleur'.$t})); //on creer une variable clx qui prend la valeur encoder en json du tableau "couleurx" actuel
             $t++;                                                          

         }

img php数组的属性

$r=1;

         foreach ($couleurs as $uneCouleur)
         {?>
            <img id = "test" src= "./images/<?=${'couleur'.$r}[0]?>.jpg " alt = "lol" onclick="loadTaille(<?php echo ${'cl'.$r} ?>);"/><?php 
            $r++;   //pour chaque couleur du produit on utilise les tableaux couleurx et clx 
         }?>

和js文件produit.js

 function loadTaille(img){

    // var txt = "'[" + img + "]'";
    // var txt = '["Bleu",1,"XL"]';

    var tailles = JSON.parse(img);
    alert (img)

        }

2 个答案:

答案 0 :(得分:0)

您还没有发布任何代码,因此很难说出您错误到底的位置,但是,这是一个适用于您发布的值的简单示例:

$arr = ['Bleu', 1, 'XL'];
echo json_encode($arr);

输出

["Bleu",1,"XL"]

顺便说一句,在动态生成javascript代码时,我真的不认为你想使用htmlspecialchars()。适当的上下文是 not html(除非您在html属性中内联javascript,我认为这不是这里的情况)。

更新

现在我看到了您发布的代码,我相信您可以通过在javascript环境中单引号呈现的json字符串来解决语法错误。

变化:

onclick="loadTaille(<?php echo ${'cl'.$r} ?>);"

为:

onclick="loadTaille('<?php echo ${'cl'.$r} ?>');"

答案 1 :(得分:0)

没有明显的理由使用htmlspecialchars()。

如果要直接在html脚本元素中显示json字符串:

<script>
var js_arr = <?php echo json_encode(['Bleu', 1, 'XL']); ?>;
console.log(js_arr);
</script>