google.script.run.withSuccessHandler无法正常运作

时间:2019-08-26 21:21:27

标签: html validation google-apps-script google-apps-script-web-application

尊敬的成员,

我在Google Apps脚本项目中建立了非常基本的HTML代码设置,该代码基本上验证了用户名和密码(只要该对是否存在于gSheet中),并且根据验证,我要么显示警报,要么重定向到另一个网页。当我将代码部署为Web应用程序时,HTML呈现得很好,提交按钮可以正常工作并执行gs代码,但是它不会将值返回给JS中script标签中的JS withSuccessHandler 函数HTML代码。

我在论坛上阅读了几个非常相同的查询,并遵循完全相同的路径,但是我无法成功。例如this post

似乎有些东西使我该死的眼睛和心灵看不见和丢失,因此决定请求您的友好帮助并重新定向我的问题。我非常感谢您的见解和帮助。

这是 HTML

<!DOCTYPE html>
<html>
    <head>
        <base target="_top">
    </head>
    <body>
        <div>
            <form id="user_login">
                <input type="text" name="userid" id="userid" placeholder="enter username"/>
                <input type="text" name="pswrd" id="pswrd" placeholder="enter password"/>
                <input type="submit" name="login" id="login" value="LOGIN"/>
            </form>
        </div>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js">
        </script>
        <script>
           $('#login').click(function() {
              console.log("Form submitted...");
              google.script.run
              .withSuccessHandler(function(response) {
                 console.log(response);
                 if (response == true) {
                    window.open("http://www.google.com", "_self");
                 } else {
                    alert("Some alert message here")
                 }
              })
              .checkName({
                 userid: $('#userid').val(),
                 pswrd: $('#pswrd').val()
              });
           });
        </script>
    </body>
</html>

这是 gs功能

var html;
var verified;

function doGet() {
    html = HtmlService.createTemplateFromFile('myformtest').evaluate().setTitle('Web App').setSandboxMode(HtmlService.SandboxMode.NATIVE);
    return html
}

function checkName(form){
  Logger.log("Form info > "+JSON.stringify(form));
  Logger.log("Userid > "+form.userid);
  Logger.log("Pwd > "+form.pswrd);
  verified = false;
  var ss = SpreadsheetApp.openById("1rard7vdpjmfrN81oi2ARhMlLGdNSxC7MqoIw2soj25E").getSheetByName("names");
  var values = ss.getDataRange().getValues();
  for(n=1;n<values.length;++n){
    var username = values[n][0]; // 1 is the index of the column starting from 0
    var password = values[n][1];
    Logger.log("username: "+username+" | password: "+password);
    if (username == form.userid && password == form.pswrd) {
      Logger.log("User found in Row("+(n + 1)+")");
      verified = true;
      break;
    }
  }
  Logger.log("User verified? "+verified);
  return verified
}

通过将表单参数正确传递给gs函数以及正确执行gs函数,我可以记录到JS被正确触发。但是,它不会将 true / false 值返回给JS内部的处理函数。

我希望在执行 checkName 函数时,将变量的值返回给 withSuccessHandler 函数中要处理的JS,并通过重定向到确定的URL或显示警告消息。

0 个答案:

没有答案