来自 json_encode 的 Return 失败

Return from json_encode fails

我安装了 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>

您想要的不正确json,因此json_encode无法帮助您。但是,您可以自己构建 js 字符串。

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

直接创建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 暗示了这一点。请务必注意该函数输出的内容。

通过在构建 $rawJS 字符串时将输入变量转换为 int,您可以安全地使 PHP 中的 $Duration$Opacityy 动态化,或者通过使用 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 . '
        }
    ]';
}