Azure逻辑应用内联JavaScript操作报错:document未定义的解决办法
修复Azure逻辑应用数组转HTML表格的问题
错误原因
你遇到的document is not defined错误,是因为Azure逻辑应用的内联JavaScript运行在服务器端环境,不存在浏览器里的document对象,最后一行操作DOM的代码完全多余,直接导致报错。
修复原有JavaScript代码
删除操作DOM的代码,改为直接返回生成的HTML字符串即可,修改后的代码如下:
var rows = [{ name: "John", age: 20, email: "xx@hotmail.com" }, { name: "Jack", age: 50, email: "xxx@hotmail.com" }, { name: "Son", age: 45, email: "xxxx@hotmail.com" }]; var html = "<table border='1|1'>"; for (var i = 0; i < rows.length; i++) { html+="<tr>"; html+="<td>"+rows[i].name+"</td>"; html+="<td>"+rows[i].age+"</td>"; html+="<td>"+rows[i].email+"</td>"; html+="</tr>"; } html+="</table>"; // 直接返回HTML字符串供后续步骤使用 return html;
修改后,内联JS动作会输出生成的HTML表格,你可以把这个输出直接放到邮件的HTML正文中。
更适合Azure逻辑应用的替代方案:使用Liquid模板
不需要写JS,用逻辑应用原生支持的Liquid模板更简单可靠:
- 添加一个Compose动作,在输入框中写入Liquid模板(替换
yourArrayVariable为你实际的数组变量名):
<table border="1"> <tr> <th>姓名</th> <th>年龄</th> <th>邮箱</th> </tr> {% for item in yourArrayVariable %} <tr> <td>{{ item.name }}</td> <td>{{ item.age }}</td> <td>{{ item.email }}</td> </tr> {% endfor %} </table>
- 在发送邮件的动作中,将邮件正文设置为Compose动作的输出,并勾选邮件的HTML格式选项。
这种方式不需要依赖内联代码,更符合逻辑应用的设计逻辑,也避免了服务器端JS的环境限制。
内容的提问来源于stack exchange,提问作者P.T
相关产品推荐
相关产品推荐

