【问题标题】:Google Apps Script json data becomes undefined in javascriptGoogle Apps Script json 数据在 javascript 中变得未定义
【发布时间】:2015-03-11 20:45:12
【问题描述】:

我正在尝试使用 javascript 来显示数据,但是当我从服务器函数获取数据时,数据变得未定义。数据通过 jsonlint 并尝试使用 JSON.parse 会导致意外的令牌错误。为什么从javascript访问时类型会发生变化,如何访问数据?

code.gs:

function getAppMenus(appID)
{
  var files = DriveApp.getFilesByName("Json.json");
  var file = files.next();
  data = file.getAs("json").getDataAsString()
  data = JSON.stringify(data);
  //data = JSON.parse(data);
  Logger.log(typeof(data));
  return data;
}

logger 说类型是字符串

$('document').ready(function()
{
  var menuData = google.script.run.getAppMenus("123");
  alert("type is:"+typeof(menuData));
  //menuData = JSON.stringify(menuData);
  //menuData = JSON.parse(menuData);
  //$("#main").append(menuData);
  alert(menuData);
  alert("fin");
});

alert 表示类型未定义。

日志:

string

"{\r\n    \"options\": {\r\n        \"option\": [\r\n            {\r\n                \"name\": \"asdf\",\r\n                \"stuff\": \"true\"\r\n            },\r\n            {\r\n                \"name\": \"fdsa\",\r\n                \"stuff\": \"false\"\r\n            }\r\n        ]\r\n    }\r\n}"

Json.json:

{
    "options": {
        "option": [
            {
                "name": "asdf",
                "stuff": "true"
            },
            {
                "name": "fdsa",
                "stuff": "false"
            }
        ]
    }
}

【问题讨论】:

    标签: javascript jquery json google-apps-script


    【解决方案1】:

    您最初对JSON.parse() 的使用已正确,但您遇到了语法错误:data = file.getAs("json").getDataAsString() 之后没有分号。这正如你所期望的那样工作:

    function getAppMenus(appID) {
      var files = DriveApp.getFilesByName("Json.json");
      var file = files.next();
      var data = file.getAs("json").getDataAsString();
      //data = JSON.stringify(data);
      data = JSON.parse(data);
      Logger.log(typeof data);
      Logger.log(data);
      return data;
    }
    

    【讨论】:

    • 啊,这并不是真正的问题,因为分号在 javascript 中是可选的
    • 有趣。如果我删除分号,我会收到您最初在问题中指定的错误。如果我把它放回去,那么一切正常:日志显示“对象”,然后是格式正确的对象。
    【解决方案2】:

    解决了! 事实证明,要通过 JS 加载数据,您需要对服务器进行异步调用。 在js中:

    <script>
    google.script.run.withSuccessHandler(displayButtons).getAppMenus("123");
    
    function displayButtons(data)
    {
        dataToDisplay = JSON.parse(data);
        alert(dataToDisplay);
    }
    </script>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多