变量返回undefined

Obl*_*lla 5 javascript gwt google-apps-script

我收到了名为的变量的未定义:名称有关为什么它不显示结果的任何帮助.在按下搜索后,它将显示在记录器中,但不会显示在index.html或Web端.

码:

// var names =[]; //I tried using a global variable but with no luck

function SearchFiles(searchTerm) {
  var searchFor = "title contains '" + searchTerm + "'";
  var owneris = "and 'Email@email.com' in Owners";

  var names = [];
  var fileIds = [];
  Logger.log(searchFor + " " + owneris);
  var files = DriveApp.searchFiles(searchFor + " " + owneris);
  while (files.hasNext()) {
    var file = files.next();
    var fileId = file.getId(); // To get FileId of the file
    fileIds.push(fileId);
    var name = file.getName();
    names.push(name);
  }

  for (var i = 0; i < names.length; i++) {
    //this is showing in the Logger
    Logger.log(names[i]);
    Logger.log("https://drive.google.com/uc?export=download&id=" + fileIds[i]);
  }

}

function returnNames(names) {
  return '<h3><b>returnNames has ran.!</b></h3> <br>' + names; // Why does this names variable return undefined???

}

function doGet(e) {
  var template = HtmlService.createTemplateFromFile('Index');
  return template.evaluate()
    .setTitle('Search Drive')
    .setSandboxMode(HtmlService.SandboxMode.IFRAME);
}


function processForm(searchTerm) {
  var resultToReturn;
  Logger.log('processForm was called! ' + searchTerm);
  resultToReturn = SearchFiles(searchTerm);
  Logger.log('resultToReturn: ' + resultToReturn)
  // shows as undefined in the logger
  return resultToReturn;
}
Run Code Online (Sandbox Code Playgroud)
<!DOCTYPE html>
<html>

<head>
  <base target="_top">
  <script>
    function displayMessage() {
      var searchTerm;
      searchTerm = document.getElementById('idSrchTerm').value;

      console.log('searchTerm: ' + searchTerm);

      google.script.run.processForm(searchTerm);
      google.script.run.withSuccessHandler(handleResults).returnNames();
    }


    function handleResults(searchTerm) {

      console.log('Handle Results was called! ');
      document.writeln(searchTerm);
    }
  </script>
</head>

<body>
  <input type="text" id="idSrchTerm" name="search">
  <input type="button" value="submitButton" name="submitButton" onclick="displayMessage()" />

</body>

</html>
Run Code Online (Sandbox Code Playgroud)

Chr*_*ras 3

我认为你的做法是错误的。returnNames(names)如果您在末尾返回SearchFiles并且只需在google.script.run.withSuccessHandler(handleResults).processForm(searchTerm);您的内部调用,它将起作用,index.html如下所示:

代码.gs

function SearchFiles(searchTerm) {
  var searchFor = "title contains '" + searchTerm + "'";
  var owneris = "and 'Email@email.com' in Owners";

  var names = [];
  var fileIds = [];
  Logger.log(searchFor + " " + owneris);
  //Logger.log(searchFor);
  var files = DriveApp.searchFiles(searchFor + " " + owneris);
  //var files = DriveApp.searchFiles(searchFor);
  while (files.hasNext()) {
    var file = files.next();
    var fileId = file.getId(); // To get FileId of the file
    fileIds.push(fileId);
    var name = file.getName();
    names.push(name);
  }

  for (var i = 0; i < names.length; i++) {
    //this is showing in the Logger
    Logger.log(names[i]);
    Logger.log("https://drive.google.com/uc?export=download&id=" + fileIds[i]);
  }

  return returnNames(names); // Here call directly returnNames and get the wanted result
}

function returnNames(names) {
  var result = '<h3><b>returnNames has ran.!</b></h3> <br>'; // + names; // Why does this names variable return undefined???
  result += '<div>names.length = '+names.length+'</div>';

  for(var i=0; i<names.length; i++) {
    result += '<div>'+names[i]+'</div>';
  }

  return result;
}

function doGet(e) {
  var template = HtmlService.createTemplateFromFile('Index');
  return template.evaluate()
    .setTitle('Search Drive')
    .setSandboxMode(HtmlService.SandboxMode.IFRAME);
}

function processForm(searchTerm) {
  var resultToReturn;
  Logger.log('processForm was called! ' + searchTerm);
  resultToReturn = SearchFiles(searchTerm);
  Logger.log('resultToReturn: ' + resultToReturn)
  // shows as undefined in the logger
  return resultToReturn;
}
Run Code Online (Sandbox Code Playgroud)

索引.html

<!DOCTYPE html>
<html>

<head>
  <base target="_top">
  <script>
    function displayMessage() {
      var searchTerm;
      searchTerm = document.getElementById('idSrchTerm').value;

      console.log('searchTerm: ' + searchTerm);

      //google.script.run.processForm(searchTerm);
      //google.script.run.withSuccessHandler(handleResults).returnNames();
      google.script.run.withSuccessHandler(handleResults).processForm(searchTerm);
    }

    function handleResults(searchTerm) {
      console.log('Handle Results was called! ');
      document.writeln(searchTerm);
    }
  </script>
</head>

<body>
  <input type="text" id="idSrchTerm" name="search">
  <input type="button" value="submitButton" name="submitButton" onclick="displayMessage()" />
</body>

</html>
Run Code Online (Sandbox Code Playgroud)

我的文件使用术语的结果屏幕截图"test"

截图工作