Ошибка возврата из json_encode

У меня установлен и работает слайдер 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>

1

Решение

Просто создайте 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, $Opacity, а также y динамический в PHP путем приведения входных переменных к int при построении $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 . '
}
]';
}
2

Другие решения

То, что вы хотите, не правильно, JSON, так json_encode не поможет тебе Но вместо этого вы можете создать строку js самостоятельно.

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

По вопросам рекламы [email protected]