我想将作为对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>
但这不起作用。我想将selected的值传递给javascript变量。
答案 0 :(得分:2)
最安全的方法是将变量作为HTML5 data
属性传递,或者传递到<meta>
<head>
内的<script id="my-script" data-selected="${selected}">
$(document).ready(function() {
var selected = $("#my-script").attr("data-selected");
$.ajax({
type:"POST",
url: '/return_table.json?selectedcategories=' + selected,
async: false,
success: function (response) {
console.log(response)
}
})
});
</script>
。
<script>
有关数据属性的更多信息:http://caniuse.com/#feat=dataset
您还可以生成<script>
window.myVar = "${selected}";
</script>
<script>
... code goes here ...
</script>
代码段,将变量公开为这样的JavaScript全局变量,然后直接在JavaScript代码中读取全局变量:
json.dumps()
...但我不建议,因为包含用户输入的变量会打开您的网站以进行攻击并且难以在HTML中转义JavaScript变量。它很方便,如果你需要传递几个变量 - 你可以对Python字典使用{{1}}来生成一个包含所有变量的JavaScript对象。
答案 1 :(得分:1)
使用
var selected=${structure:selected};
并删除
tal define:"selected ${selected}"
脚本标签中的。