从json_encode返回失败

时间:2018-07-03 15:45:43

标签: php json jssor

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

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

当我尝试从函数加载时,如下面的代码所示,控制台命令的输出为

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

如果我去除引号并将其放在_SlideshowTransitions函数中,它们将起作用。引号引起了问题吗?如果是这样,我该如何删除那些?还是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 个答案:

答案 0 :(得分:2)

您想要的不是正确的json,因此json_encode对您没有帮助。但是,相反,您可以自己构建js字符串。

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

答案 1 :(得分:2)

直接创建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_encode会将$Jease$.$InBounce视为字符串而不是JS代码,从而阻止其按预期运行。

这使GetTransitions极其危险,新的变量名rawJS暗示了这一点。确保注意该函数的输出。

通过在构建$Duration字符串时将输入变量强制转换为int或转义动态变量,可以在PHP中安全地使$Opacityy$rawJS动态化json_encode的值(而不是整个字符串):

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 . '
        }
    ]';
}