Зачем json кодировать при отправке данных из php в javascript (Laravel)?

Я только что прочитал этот вопрос и заметил много ответов, показывающих кодировку JSON. Мне просто интересно, почему? Это для какой-то безопасности? Так, например, в Laravel это будет правильный способ вытащить вещи в

var date = '{!! json_encode($event->date) !!}',
parseDate = JSON.parse(date);

//use parseDate here.

Извините за создание совершенно нового вопроса, но у меня нет представителя, чтобы комментировать исходный вопрос: /

0

Решение

Когда вы используете json_encode как:

var date = {!! json_encode($event->date) !!};

тогда он возвращает JSON строка. PHP json_encode Функция переводит данные, переданные ему в JSON строка, которая затем может быть выведена в переменную JavaScript. И JSON является подмножеством буквенной нотации JavaScript, и поэтому вы можете отбросить JSON в код JavaScript непосредственно везде, где выражение допустимо.

Нет необходимости JSON.parse или же $.parseJSON и на самом деле их использовать не получится.

date будет либо объектом JavaScript (если в «ассоциативном» массиве PHP есть нечисловые ключи и т. д. json_encode выход {...}) или массив JavaScript (если json_encode выход [...]).

1

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

Обычно JSON используется для отправки данных с сервера в браузер, когда вы хотите сохранить его структуру. В Javascript легко разобрать, в результате получается массив, который соответствует исходному массиву на языке сервера (например, PHP). Для простых, одиночных значений это действительно не нужно.

0

В ответ на Amit Gupa, вот код, который не будет работать без разбора (на основе этот). Хорошо, первая часть является основной частью представления. Событие $ извлекается из базы данных, а дата и время хранятся отдельно. Я использую это как виджет, используя виджеты Laravel хотя это в значительной степени действует как нормальный взгляд.

<div id="clockdiv">
<div class = 'timeFormat form-group-shadow'>
<span class="days">0</span>
<div class="small-text">Days</div>
</div>
<div class = 'timeFormat form-group-shadow'>
<span class="hours">00</span>
<div class="small-text">Hours</div>
</div>
<div class = 'timeFormat form-group-shadow'>
<span class="minutes">00</span>
<div class="small-text">Minutes</div>
</div>
<div class = 'timeFormat form-group-shadow'>
<span class="seconds">00</span>
<div class="small-text">Seconds</div>
</div>
</div>
</div>

{{ HTML::script('js/countdown.js') }}

<script>
var date = '@if(isset($event)){!! json_encode($event->date) !!}@endif',
time = '@if(isset($event)){!! json_encode($event->time) !!}@endif',
dateTime = JSON.parse(date) + " " + JSON.parse(time);

if(new Date(dateTime) >= Date.now()){
initializeClock('clockdiv', dateTime);
};
</script>

Сценарий ‘js / countdown.js’ можно увидеть здесь.

function getTimeRemaining(endtime){
var t = Date.parse(endtime) - Date.parse(new Date());
var seconds = Math.floor( (t/1000) % 60 );
var minutes = Math.floor( (t/1000/60) % 60 );
var hours = Math.floor( (t/(1000*60*60)) % 24 );
var days = Math.floor( t/(1000*60*60*24) );
return {
'total': t,
'days': days,
'hours': hours,
'minutes': minutes,
'seconds': seconds
};
}

function initializeClock(id, endtime){
var clock = document.getElementById(id);
var daysSpan = clock.querySelector('.days');
var hoursSpan = clock.querySelector('.hours');
var minutesSpan = clock.querySelector('.minutes');
var secondsSpan = clock.querySelector('.seconds');

function updateClock(){
var t = getTimeRemaining(endtime);
daysSpan.innerHTML = t.days;
hoursSpan.innerHTML = ('0' + t.hours).slice(-2);
minutesSpan.innerHTML = ('0' + t.minutes).slice(-2);
secondsSpan.innerHTML = ('0' + t.seconds).slice(-2);
if(t.total<=0){
clearInterval(timeinterval);
}
}

updateClock();

var timeinterval = setInterval(updateClock,1000);
}

Этот код работает нормально, но не работает, когда я не анализирую.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector