繁体   English   中英

Json编码不起作用

[英]Json encode doesn't work

我想将一个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)

        }

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

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

输出

["Bleu",1,"XL"]

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

更新:

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

更改:

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

至:

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

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

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

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

暂无
暂无

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

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