我正在设置一个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个项目。顺便说一句,我在这里使用了谷歌应用程序脚本。
任何帮助将不胜感激。非常感谢!
问题
仔细观察您的类型-subjectfromDB()
返回一个String
,然后通过listfiltered
属性将其传递给模板。评估完模板后,您的循环将开始遍历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;
Notes
subjectfromDB
作为其第一个参数调用了subjectdb
函数,但声明它不接受任何参数-请检查是否有意。