如何在Lapis中给前端JS传送JSON数据对象
在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参数。