【问题标题】:web2py: json serializer and javascript has problems with quotes around python stringweb2py:json 序列化程序和 javascript 在 python 字符串周围出现引号问题
【发布时间】:2015-08-31 19:51:14
【问题描述】:

我希望将复杂的二维列表从 python 带到 javascript。 Javascript 可以很好地处理数字和列表语法(括号和逗号),但它无法理解字符串周围的引号。我曾尝试将列表直接嵌入到代码中并首先将其转换为 json,但都不起作用。我认为问题在于 javascript 以某种方式将 " 转换为其他内容,我马上说明我的意思。

但这里有一个重现问题的示例代码。

行动:

def problem():
    this_works = [[1,2,5,6.99],[24,55,6.8,124]]
    this_does_not = [["a",5,6,7],["b",8,9,10]]
    return dict(locals())

查看:

{{extend 'layout.html'}}
{{from gluon.serializers import json}}

<p id="test_1">unchanged</p>
<p id="test_2">unchanged</p>
<p id="test_3">unchanged</p>

<script>
    var x;
    x = {{=this_works}};
    document.getElementById("test_1").innerHTML = x;

    var y;
    //y = {{=this_does_not}};
    document.getElementById("test_2").innerHTML = y;

    var z;
    //z = {{=json(this_does_not)}};
    document.getElementById("test_3").innerHTML = z;

</script>

如果这两行中的任何一行没有注释,代码就会中断。如果查看 html 的源代码,可以看到 web2py 将 " 更改为其他内容:

<script>
    var x;
    x = [[1, 2, 5, 6.99], [24, 55, 6.8, 124]];
    document.getElementById("test_1").innerHTML = x;

    var y;
    //y = [[&#x27;a&#x27;, 5, 6, 7], [&#x27;b&#x27;, 8, 9, 10]];
    document.getElementById("test_2").innerHTML = y;

    var z;
    //z = [[&quot;a&quot;, 5, 6, 7], [&quot;b&quot;, 8, 9, 10]];
    document.getElementById("test_3").innerHTML = z;

</script>

【问题讨论】:

    标签: javascript json serialization web2py


    【解决方案1】:

    出于安全原因,web2py 模板引擎会转义模板中插入的所有文本。为防止这种情况,您应该使用 XML() 助手:

    y = {{=XML(this_does_not)}};
    

    【讨论】:

    • 这适用于字符串,但不适用于None。但是我使用了XML(json(...)),现在它适用于两者,因为json将None转换为null。有没有更方便的方法?
    • 使用json 可能是最安全的,因为这将确保您的 Python 对象正确转换为 JSON。或者,您可以只包含逻辑以将对象替换为字符串 'null',以防它是 None(在将其传递给 XML 之前)。
    猜你喜欢
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    • 2013-02-08
    • 2018-10-29
    相关资源
    最近更新 更多