如何在javascript中使用tal变量?

如何在javascript中使用tal变量?,javascript,python,templates,pyramid,chameleon,Javascript,Python,Templates,Pyramid,Chameleon,我想将作为对zope模板的响应返回的变量传递到金字塔中的javascript变量中 以下是视图代码: def return_table(request): selected = request.params.getall("selectedcategories") return {'selected': selected} 以下是模板: <script tal define:"selected ${selected}"> var selected = ${selected

我想将作为对zope模板的响应返回的变量传递到金字塔中的javascript变量中

以下是视图代码:

def return_table(request):
selected = request.params.getall("selectedcategories")

return {'selected': selected}
以下是模板:

<script tal define:"selected ${selected}">
    var selected = ${selected}
    $.ajax({
        type:"POST",
        url: '/return_table.json?selectedcategories=' + selected,
        async: false,
        success: function (response) {
            console.log(response)
        }
   })
</script>

var selected=${selected}
$.ajax({
类型:“POST”,
url:'/return_table.json?selectedcategories='+selected,
async:false,
成功:功能(响应){
console.log(响应)
}
})

但这是行不通的。我想将所选的值传递到javascript变量中。

最安全的方法是将变量作为HTML5
数据
属性传递,或者在
内部
中传递


$(文档).ready(函数(){
所选变量=$(“#我的脚本”).attr(“所选数据”);
$.ajax({
类型:“POST”,
url:'/return_table.json?selectedcategories='+selected,
async:false,
成功:功能(响应){
console.log(响应)
}
})
});
有关数据属性的详细信息:

您还可以生成将变量公开为JavaScript全局变量的
代码段,如下所示,然后直接在JavaScript代码中读取全局变量:

<script>
     window.myVar = "${selected}";
</script>     

<script>
     ... code goes here ...
</script>

window.myVar=“${selected}”;
... 代码在这里。。。
。。。但我不建议这样做,因为包含用户输入的变量会使您的站点受到攻击,并且很难在HTML中转义JavaScript变量。不过,如果您需要传递多个变量,它很方便—您可以对Python字典使用
json.dumps()
生成包含所有变量的JavaScript对象。

使用

var selected=${structure:selected};
移除

tal define:"selected ${selected}"

在脚本标记中。

嘿,我按照你的建议做了,我得到了这个错误表达式错误:无效语法-字符串:“${selected}”如果我做这个操作,在chrome开发者工具的源代码部分,它会显示var selected=[“Campaign\uu c”]这意味着所选变量正在被传递,但当我执行console.log(selected)时,它显示为未定义。您是在触发文档加载事件后还是在生成HTML页面时运行脚本(请参见上面的示例)。确保脚本标记具有id
myscript
,并使用jQuery检查它。
tal define:"selected ${selected}"