Javascript 在Google应用程序脚本上将值从HTML传递到Google脚本?

Javascript 在Google应用程序脚本上将值从HTML传递到Google脚本?,javascript,google-apps-script,Javascript,Google Apps Script,我需要将数据值从HTML传递到GAS项目的Google脚本。带有代码注释的部分是我需要传递的值 gs文件 function doGet(e) { if (e.parameter.prefix){ var result = data; // <-- GET VALUE "data" FROM THE HTML "forms.html" var content = e.parameters.prefix +

我需要将数据值从HTML传递到GAS项目的Google脚本。带有代码注释的部分是我需要传递的值

gs文件

function doGet(e) { 
      if (e.parameter.prefix){ 
        var result = data; // <-- GET VALUE "data" FROM THE HTML "forms.html"
        var content = e.parameters.prefix + '(' +JSON.stringify(result) + ')';
        return ContentService.createTextOutput(content)
        .setMimeType(ContentService.MimeType.JAVASCRIPT);
        
      }
      var html = HtmlService.createHtmlOutputFromFile('Index');
      return html.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
    }
var data;

function myfunction(x) {
    data = x;
}

function doGet(e) { 
      if (e.parameter.prefix){ 
        var result = data; // <-- GET VALUE "data" FROM THE HTML "forms.html"
        var content = e.parameters.prefix + '(' +JSON.stringify(result) + ')';
        return ContentService.createTextOutput(content)
        .setMimeType(ContentService.MimeType.JAVASCRIPT);
        
      }
      var html = HtmlService.createHtmlOutputFromFile('Index');
      return html.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}
函数doGet(e){
如果(e.parameter.prefix){

var result=data;//遵循以下步骤:

  • 在gs文件中,创建一个顶部没有值的变量:
    var data;
  • 在下面创建一个函数,如下所示:
  • 在Index.html文件中,特别是在
    passData()
    函数中,在函数底部插入以下行:
    google.script.run.myfunction(data);
  • 最后,您将能够使用
    result
    变量作为
    doGet()
    函数中的数据

    --您的代码应该如下所示--

    gs文件

    function doGet(e) { 
          if (e.parameter.prefix){ 
            var result = data; // <-- GET VALUE "data" FROM THE HTML "forms.html"
            var content = e.parameters.prefix + '(' +JSON.stringify(result) + ')';
            return ContentService.createTextOutput(content)
            .setMimeType(ContentService.MimeType.JAVASCRIPT);
            
          }
          var html = HtmlService.createHtmlOutputFromFile('Index');
          return html.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
        }
    
    var data;
    
    function myfunction(x) {
        data = x;
    }
    
    function doGet(e) { 
          if (e.parameter.prefix){ 
            var result = data; // <-- GET VALUE "data" FROM THE HTML "forms.html"
            var content = e.parameters.prefix + '(' +JSON.stringify(result) + ')';
            return ContentService.createTextOutput(content)
            .setMimeType(ContentService.MimeType.JAVASCRIPT);
            
          }
          var html = HtmlService.createHtmlOutputFromFile('Index');
          return html.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
    }
    
    var数据;
    函数myfunction(x){
    数据=x;
    }
    函数doGet(e){
    如果(e.parameter.prefix){
    
    var result=data;//感谢您的回复。我得到了一个
    未定义的
    响应。这显示了控制台中的问题。如果数据上的值已经在doGet(e)函数上(如“hi”或其他),它可以工作,但以您的方式得到未定义的值。这就是我知道问题的原因。
    doGet(e)
    函数执行(运行)只有一次,当用户访问web应用时。因此,当用户访问web应用时,
    doGet(e)
    函数运行。页面加载后,用户通过
    google.script.run
    发送数据。将
    google.script.run
    看作是对服务器的
    ajax
    调用,当
    ajax
    运行时,
    myfunction(x)
    运行并将数据变量更改为所需的值,但不执行
    doGet()
    函数,因为正如我所说,当用户访问页面时,它只执行一次。因此解决方案是将代码放入
    myfunction(x)中
    是的,这就是问题所在。我将使用
    ajax
    检查对服务器的调用,因为我不知道如何实现它。非常感谢@FaisalYou,我们欢迎您
    <!DOCTYPE html>
    <html>
    <head>
    <base target="_top">
    </head>
    <body>
    <h1 id='title' style="color: #e31414">SCRIPT</h1>
    <h1 id='done' style="display: none"> DATA PASSED</h1>
    <button id="btn" onclick="passData()">Run "passData()"</button>
    </body>
    </html>
    
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
    <script> 
    function passData() {
       $('#done').show();
       var data = 'value'; //<-- PASS THIS DATA TO GOOGLE SCRIPT (The .gs file)
       google.script.run.myfunction(data);
    }
    </script>