如何在Lapis中给前端JS传送JSON数据对象

1.3k 词

在Lua编写WEB程序的过程中, 有一种应用场景,是从KVDB,或是DB中取出JSON数据,或是直接定义JSON数据传给前端,用于显示展示,或是其它之用。

为了减化说明,我们直接用一个不是从DB取得,而是自定义一个JSON数据, 返回给前端的模板。

Lapis lua代码:

app:get("/return_json", function(self)
        --自定义一个最简单的JSON结构
        tmp_json= {test="abc"}
        --对JSON进行编码
        self.tmp_json = json.encode(tmp_json)
        --渲染模板
        return { render = "json_template" }
end)

Javascript代码:

<script type="text/javascript">

    //这个函数是对文本中含有的特殊符号进行转换处理
    function htmlspecialchars_decode(text) {
        var replacements = Array("&", "<", ">", '"', "'");
        var chars = Array("&", "<", ">", """, "'");
        for (var i = 0; i < chars.length; i++) {
            var re = new RegExp(chars[i], "gi");
            if (re.test(text)) {
                text = text.replace(re, replacements[i]);
            }
        }
        return text;
    }

    // 从etlua模板中,取出lapis传递的值。
    var tmp_json = "<%= tmp_json %>"
    // 转换特殊符号
    var html_tmp_json = htmlspecialchars_decode(tmp_json)

    //  这是将一个普通的字符串,转换成Javascript的JSON对象
    var js_json = eval(html_tmp_json);
</script>

整个JSON从Lua到JS对象过程是:

lua table-> lua json-> js string->js object

中间特殊符号的处理,只是改变了内容,而没改变数据型态。

这个例子是返回JSON数据,同时我们也可以传JSON数据给Lapis, 之后我们可能会简单介绍一下Lapis如何解释JSON参数。