来自 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
、$Opacity
和 y
动态化,或者通过使用 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 . '
}
]';
}
我安装了 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
、$Opacity
和 y
动态化,或者通过使用 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 . '
}
]';
}