Php 使用javascript内部的嵌套smarty更正语法

Php 使用javascript内部的嵌套smarty更正语法,php,javascript,arrays,smarty,Php,Javascript,Arrays,Smarty,我正在检索smarty数组“data”,并希望将其存储在javascript变量“store”中: {if isset({$data})} <script type="text/javascript"> var store = {ldelim}{rdelim}; {foreach from=$data key=k item=v} var index = {$k};

我正在检索smarty数组“data”,并希望将其存储在javascript变量“store”中:

{if isset({$data})}
        <script type="text/javascript">
            var store = {ldelim}{rdelim};
            {foreach from=$data key=k item=v}
                var index = {$k};
                store.index = {$v};
            {/foreach}
                alert(store);
        </script>
    {/if}

编辑:在源代码中,我得到var store={}

您写了一个错误的标签。在Smarty中,要启用JavaScript,必须使用
{literal}
标记

对于exmaple:

{literal}
<script type="text/javascript" language="javascript">
// All your regular javascript code.....
</script>
{/literal}
{literal}
//所有常规javascript代码。。。。。
{/literal}

尝试通过Smarty创建javascript对象/数组,而不是采用冗长且难以理解的方式,尝试以下方法

$arr = json_encode(array(array('key1' => 'value1'), array('key2' => 'value2')));
$smarty->assign('data', $arr);
和在模板中

<script>
var store = {$data};
</script>

var-store={$data};

因此,我们让PHP为我们创建一个有效的javascript对象,并将该字符串分配给smarty,smarty只创建了一个变量并分配该字符串。

生成的代码是什么样子的?我被告知store不是一个定义的变量??如果您在页面上“查看源代码”,生成的javascript是什么样子的?请用这些信息编辑您的问题。@hank实际上,我只有这个var store={};你不必,你可以用
{ldelim}
{rdelim}
写出花括号。这不是
{literal}
所做的,你误解了它的用途。不需要使用JavaScript,而且它肯定不会启用JavaScript。就我所知,Smarty需要knw{literal},请参阅Smarty网站上的文字手册。“{literal}标记允许按字面理解数据块。这通常用于Javascript或样式表块周围,{curly brates}会干扰模板分隔符语法的地方。”
<script>
var store = {$data};
</script>