代码之家  ›  专栏  ›  技术社区  ›  user3052443

从json_encode返回失败

  •  1
  • user3052443  · 技术社区  · 6 年前

    我已经安装了jssor滑块并开始工作。我正在尝试添加使用php从外部文件更改幻灯片类型的功能。在我未编辑的jssor代码中,如果我输入以下幻灯片类型,它们将按预期工作:

        {$Duration:800,$Opacity:2},
        {$Duration:1000,y:1,$Easing:$Jease$.$InBounce,$Opacity:2}
    

    当我尝试从函数加载时,如下面的代码所示,console命令的输出是

        0: "{$Duration:800,$Opacity:2},"​
        1: "{$Duration:1000,y:1,$Easing:$Jease$.$InBounce,$Opacity:2}"
    

    如果我去掉引号并将它们放在幻灯片转换功能中,它们就会工作。那么,是引语造成了问题吗?如果是的话,我怎样才能去掉这些?或者是jssor函数不能处理变量?或者别的什么?

        function GetTransitions() {
            $xsisitons = array();
            $xsisitons[] = '{$Duration:800,$Opacity:2},';
            $xsisitons[] = '{$Duration:1000,y:1,$Easing:$Jease$.$InBounce,$Opacity:2}';
            return json_encode($xsisitons);
        }
        $jsondata = GetTransitions(); 
    
        <script>
        var xsitions = <?php echo $jsondata; ?>;
        console.dir(xsitions);
    
        var _SlideshowTransitions = [
          xsitions
        ];
        </script>
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   jstur    6 年前

    直接创建js:

    <?php
        function GetTransitions() {
            return $rawJS = '[
                {
                    $Duration: 800,
                    $Opacity: 2
                },
                {
                    $Duration: 1000,
                    y: 1,
                    $Easing: $Jease$.$InBounce,
                    $Opacity: 2
                }
            ]';
        }
        $options = GetTransitions(); 
    ?>
        <script>
        var xsitions = <?php echo $options; ?>;
        console.dir(xsitions);
    
        var _SlideshowTransitions = xsitions;
        </script>
    

    这条线阻止你使用 json_encode 以下内容:

    $Easing: $Jease$.$InBounce,
    

    JSON编码 会请客 $Jease$.$InBounce 作为字符串而不是js代码,阻止它按预期运行。

    这使得 GetTransitions 非常危险,这是由新变量名暗示的 rawJS 是的。一定要注意那个函数的输出。

    你可以安全地 $Duration 我是说, $Opacity ,和 y 通过在构建 $rawJS 字符串,或通过使用 JSON编码 以下内容:

    function GetTransitions($duration_1, $duration_2, $opacity, $y) {
        return $rawJS = '[
            {
                $Duration: ' . (int)$duration_1 . ',
                $Opacity: ' . (int)$opacity . '
            },
            {
                $Duration: ' . (int)$duration_2 . ',
                y: ' . (int)$y . ',
                $Easing: $Jease$.$InBounce,
                $Opacity: ' . (int)$opacity . '
            }
        ]';
    }
    
        2
  •  2
  •   Philipp    6 年前

    你想要的不是正确的json,所以 json_encode 不会帮你的。但是,您可以自己构建js字符串。

    $xsisitons[] = '{$Duration:800,$Opacity:2}';
    $xsisitons[] = '{$Duration:1000,y:1,$Easing:$Jease$.$InBounce,$Opacity:2}';
    return '[' . join(',', $xsisitons) . ']';