为什么javascript不返回并显示文本?

时间:2014-02-05 23:12:57

标签: google-apps-script

在html和code.gs中,我有一个页面要求选择一个日期,然后尝试在该日期向屏幕显示事件的日历标题。

这是html:

<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/themes/redmond/jquery-ui.css">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/jquery-ui.min.js"></script>
<div class="container" >
    <div>
      <h1>Welcome to the page</h1>
      <p>Please select a date below.</p>
      <p>Click Here: <input type="text" name="date" id="datepicker" /><p> 
    </div>
</div>
<div id='test'></div>

<script>
$("#datepicker").datepicker();
$("#datepicker").on("change", function () {
var dateSelected = $(this).val()
var displayText = google.script.run.listEvents(dateSelected);
document.getElementById("test").innerHTML=displayText;
$("#test").text(displayText);
});

</script>

这是code.gs:

function doGet(e) {
  return HtmlService.createHtmlOutputFromFile('index.html').setSandboxMode(HtmlService.SandboxMode.NATIVE);
}

function listEvents(dateSelected) {
  var calendar = CalendarApp.getCalendarById('CalendarId').getEventsForDay(new Date(dateSelected));
  if (calendar[0] == null) {
    var text = 'Nothing to show';
    return text;
  }
  else {
    Logger.log('Number of events: ' + calendar[0].getTitle());
  }

}

在if(calendar == null)部分,我把Logger.log('今天没有')记录得很好。所以我认为它与我返回的方式或返回的类型有关,因为在html页面上显示的是文本'undefined'。

如果我将Jquery设置为$(“#test”)。text($(this).val());然后它显示所选的日期。只有当我为displayText替换$(this).val()时才会起作用。

我刚刚替换了这行代码: var displayText = google.script.run.listEvents(dateSelected); 有了这个: var displayText ='random text'; 果然字符串'随机文字'显示在屏幕上。它必须是gas脚本返回的数据类型。我甚至能够从脚本返回一个字符串,还是有一些限制?我只是缺少一些语法吗?

1 个答案:

答案 0 :(得分:0)

我相信我刚刚找到了这个here的答案。您想使用 .withSuccessHandler 来获取返回值,如下所示:

<script>
function onSuccess(displayText) {
  document.getElementById("test").innerHTML=displayText;
  $("#test").text(displayText);
}
$("#datepicker").datepicker();
$("#datepicker").on("change", function () {
var dateSelected = $(this).val()
google.script.run.withSuccessHandler(onSuccess).listEvents(dateSelected);
});

</script>

上面的代码未经过测试,但是根据工作示例快速编写。