Только один элемент из данных jdb c mysql отображается в моем раскрывающемся списке html в виде символов - Appscript. Почему? - PullRequest
1 голос
/ 05 февраля 2020

Я настраиваю выпадающий список HTML, отображающий элементы из наших данных Google Cloud SQL. Тем не менее, что-то не так с моим кодом и не могу понять.

Вот мой код:

CODE.GS

function doGet(e){
 var listfiltered = subjectfromDB(subjectdb)

  var tmp = HtmlService.createTemplateFromFile("page");
  tmp.listfiltered = listfiltered;

   return tmp.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME).setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL).addMetaTag('viewport', 'width=device-width, initial-scale=1');

}


function subjectfromDB(){

  var connectionName = 'xxxxxx';
  var user = 'xxxxx';
  var userPwd = 'xxxxx';
  var db = 'xxxxxx';
  var dbUrl = 'jdbc:google:mysql://' + connectionName + '/' + db;
  var conn = Jdbc.getCloudSqlConnection(dbUrl, user, userPwd);

  var start = new Date();
  var stmt = conn.createStatement();
  stmt.setMaxRows(1000);
  var results = stmt.executeQuery('SELECT SubjectName FROM Subject WHERE SubjectArchived != true');
  var numCols = results.getMetaData().getColumnCount();

  while (results.next()) {
    var rowString = '';
    for (var col = 0; col < numCols; col++) {
      rowString += results.getString(col + 1) + '\t';
    }
    Logger.log(rowString);
  }

  results.close();
  stmt.close();

  return rowString;

}

HTML

<select id="case1" name="case" class="validate browser-default" required>
            <option value="" disabled selected>Select Case</option>

           <? for (var i=0;i<listfiltered.length;i++){ ?>
           <option><?= listfiltered[i]; ?></option>

           <? } ?>

          </select>
          </div>

Возвращает только 1 элемент в раскрывающемся списке. Кстати, я использовал скрипт Google Apps здесь.

Любая помощь будет оценена. Большое спасибо!

OUTPUT

1 Ответ

2 голосов
/ 05 февраля 2020

Проблема

Внимательно следите за вашими типами - subjectfromDB() возвращает String, который вы затем передаете шаблону через свойство listfiltered. Как только шаблон оценит, ваш l oop начинает итерацию по listfiltered, что означает, что он повторяет по каждому символу в String.

Решение

var options = [];

while (results.next()) {
  var rowString = '';
  for (var col = 0; col < numCols; col++) {
    rowString += results.getString(col + 1) + '\t';
  }
  options.push(rowString));
}

results.close();
stmt.close();

return options;

Примечания

  1. В вашем примере кода функция subjectfromDB вызывается с subjectdb в качестве первого аргумента, но это Заявлено, что параметры не принимаются - проверьте, не является ли это намеренным.
...