Google apps script 在Google应用程序脚本中将变量显示为html?

Google apps script 在Google应用程序脚本中将变量显示为html?,google-apps-script,google-sites,Google Apps Script,Google Sites,假设我们有一个变量。此变量是在google应用程序脚本中创建的。在该应用程序脚本项目中,您有两个文件。首先是.gs文件,变量来自该文件。接下来是html文件。如何将变量转换为html GAS: function doGet() { return HtmlService.createHtmlOutputFromFile('index'); } function items() { var exmp = 45; document.getElementById("test").

假设我们有一个变量。此变量是在google应用程序脚本中创建的。在该应用程序脚本项目中,您有两个文件。首先是.gs文件,变量来自该文件。接下来是html文件。如何将变量转换为html

GAS:
function doGet() {
    return HtmlService.createHtmlOutputFromFile('index');
}
function items() {
    var exmp = 45;
    document.getElementById("test").innerHTML = "You have " + exmp + " items";    

HTML:
<script>
    google.script.run.items();
</script>

<div id="test"></div>
气体:
函数doGet(){
返回HtmlService.createhtmloutpfromfile('index');
}
功能项(){
var-exmp=45;
document.getElementById(“test”).innerHTML=“您有”+exmp+“项”;
HTML:
google.script.run.items();

但是,这不起作用。我如何才能做到这一点?

您需要首先使用createHTMLOutput函数创建HTML 为了附加字符串,必须使用var.append方法

function items(){
  var email = Session.getActiveUser().getEmail();

  var output = HtmlService.createHtmlOutput(email);
  var string1 = HtmlService.createHtmlOutput('<p>You have </p>')
  string1.append(output);
  string2= HtmlService.createHtmlOutput('<p> items</p>')
  string1.append(string2);
  Logger.log(string1.getContent());
}
功能项(){
var email=Session.getActiveUser().getEmail();
var output=HtmlService.createHtmlOutput(电子邮件);
var string1=HtmlService.createHtmlOutput(“您有”

”) string1.追加(输出); string2=HtmlService.createHtmlOutput(“items

”) string1.追加(string2); Logger.log(string1.getContent()); }

如果您仔细阅读HTML服务文档的一节,您会发现一个示例几乎完全符合您的要求。下面的代码将该示例改编为您的示例

您需要将GAS服务器的内容与HTML客户端的内容分开。例如,
document.getElementById(“test”).innerHTML=…
在服务器/GAS代码的上下文中不表示任何内容。相反,对
文档的修改将由客户端的Javascript完成—在本例中,是通过一个脚本

成功处理程序是一个客户端Javascript回调函数,它将从服务器函数
items()
接收异步响应

客户端对服务器端函数的调用是异步的:在 浏览器请求服务器运行函数doSomething(),即 浏览器立即继续到下一行代码,无需等待 请回答

这意味着无需等待对服务器功能的调用返回代码…浏览器将继续运行。在本例中,您将看到“更多加载…”文本显示在
google.script.run
调用之后,但在收到响应之前

如果
items()
需要执行更高级的操作…比如从电子表格中读取信息?继续并更改它…只需确保
return
返回要显示的文本,并且返回的内容将是有效的HTML(因此
innerHTML
操作正常)

代码.gs index.html
正在加载。。。
成功时的功能(项目){
document.getElementById('test').innerHTML=items;
}
google.script.run.withSuccessHandler(onSuccess.items();
document.getElementById('test').innerHTML=“更多加载…”;

你应该真正解释一下为什么这可以解决问题。@NathanielFord这很明显!用户缺少一个关键的createHtMloutput函数你的答案(正确地)落在了低质量的审阅队列中。如果正确的答案是“你缺少
createHtMloutput()
您的答案没有明确指出这一点,更重要的是可以描述
createHtmlOutput()
createHtmlOutput fromfile()
之间的区别,或者至少是其中一个出错的原因。通常说“试试这个”一块未注释的代码将被投票为低质量代码。我留下注释的唯一原因是为了让您了解队列状态。我想我应该做一个更好的示例。如果变量始终为45,则此示例有效。我真正拥有的是:GAS检查电子表格并查找用户的电子邮件地址。找到后,它会保存一个值e将其与变量关联。因此每次变量都不同。@user3743564这里的关键是创建htmloutput函数。您可以调整其余的。
function doGet() {
    return HtmlService.createHtmlOutputFromFile('index');
}

function items() {
  Utilities.sleep(5000);   // Added to allow time to see the div content change
  var exmp = 45;
  return( "You have " + exmp + " items" );    
}
<div id="test">Loading...</div>

<script type="text/javascript">
  function onSuccess(items) {
    document.getElementById('test').innerHTML = items;
  }

  google.script.run.withSuccessHandler(onSuccess).items();

  document.getElementById('test').innerHTML = "More loading...";
</script>