在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脚本返回的数据类型。我甚至能够从脚本返回一个字符串,还是有一些限制?我只是缺少一些语法吗?
答案 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>
上面的代码未经过测试,但是根据工作示例快速编写。