首页 > 解决方案 > 无法从包含的数据中选择特定元素

问题描述

我对 JSON 格式有疑问。我是这种东西的新手,所以我不知道哪个是问题所在。在谷歌应用程序脚本中,我有这个 get 功能

function doGet() {
    var htmlTemplate = HtmlService.createTemplateFromFile('html');
    var ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1_cj_HO2oN6CYe_Pb7Cy8S3yVtwKW8Efr-Sdyf1Sk8Ts/edit#gid=2009573145");

    htmlTemplate.dataFromServerTemplate = makeJSON(getRowsData_(ss.getSheetByName("Foglio8"),getExportOptions()),getExportOptions());
    var htmlOutput = htmlTemplate.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME)
        .setTitle('sample');
    return htmlOutput;
}

现在,这是不工作的 HTML 部分

<div>
    <p id="tx"></p>
</div>
<script type="text/javascript">
    var data = <?!=JSON.stringify(dataFromServerTemplate) ?>; 
    function caric(){
        document.getElementById("tx").innerText= data.saldo;}
</script>
</body>

页面的功能caric()运行onload。“saldo”实际上包含在这个 JSON 中。

如果我使用data.saldo我收到undefined但如果我只使用data它可以工作并打印 JSON 中包含的所有内容。

你知道我做错了什么吗?谢谢

标签: javascriptjsonhtmlgoogle-apps-script

解决方案


JSON.stringify 产生一个字符串而不是一个对象。在您的服务器代码中,您应该执行类似的操作。

var obj = { name: "me", gender: "male", eyes: "blue" };
htmlTemplate.dataFromServerTemplate = JSON.stringify(obj);

而在客户端这个

var data = JSON.parse(<?= dataFromServerTemplate ?>);
(function caric(){
    document.getElementById("tx").innerText= data.name;}());

推荐阅读