Json в javascript в жидких шаблонах с помощью extbase

Я пытался получить json в переменной javascript. Я использую жидкие шаблоны в своем расширении extbase typo3. В своем действии я загружаю json с помощью curl. Этот json я назначаю шаблону. В моем шаблоне это выглядит так:

<script type="text/javascript">
var json = {jsonVarFromControllerAction};
</script>

В этом случае json интерпретируется как html-код. Это выглядит как:

{&quot;content&quot;:&quot;testcontent&quot;}

В действии контроллера это правильный json!

{"content": "testcontent"}

Какое решение?


person freshp    schedule 09.01.2013    source источник
comment
Просто отключите цитирование в движке шаблонов   -  person sbmaxx    schedule 09.01.2013


Ответы (3)


Используйте <f:format.htmlentitiesDecode> ViewHelper, чтобы расшифровать это, например:

<script type="text/javascript">
    var json = <f:format.htmlentitiesDecode>{jsonVarFromControllerAction}</f:format.htmlentitiesDecode>;
</script>

Вы можете просмотреть все доступные ViewHelpers в typo3/sysext/fluid/Classes/ViewHelpers

Другой вариант - получить JSON, отформатированный с помощью PHP, непосредственно из действия с AJAX (без передачи его в представление). Это полезно, если вы хотите получить новые данные без обновления всей страницы.

person biesior    schedule 09.01.2013
comment
доступна ли эта программа просмотра в typo3 4.5? - person freshp; 09.01.2013
comment
Лол, это не так, но вы можете просто скопировать из любой следующей версии (например, 4.6 или 4.7) - person biesior; 09.01.2013

Я написал свой собственный помощник по просмотру. Эта программа просмотра получает только json-контент и html_entity_decode его.

public function render($json)
{
    return html_entity_decode($json);
}

Это работает хорошо, но я спрашиваю себя, почему я должен писать помощника, чтобы получить чистое содержимое моих собственных переменных?

person freshp    schedule 10.01.2013

vhs содержит format.json.encode:

<script type="text/javascript"> 
    var title = {v:format.json.encode(value: branch.name)};
    //.. do something
</script>
person cweiske    schedule 21.02.2017