请求摘要:
我知道 FormPanel 可以与 doPost(e) 配合使用。
但是如果我有几个 formPanel,并且每个 formPanel 都需要使用不同的 doPost(e) 集?
由于 doPost(e) 是固定名称,如何拥有一些不同的 doPost(e),如 doPost1(e)、doPost(2) 等。
与createSubmitButton同样的问题,因为它自动查找函数doPost(e),如何引导每个formPanel的提交触发正确的doPostX(e)
如果上述不可能,是否意味着每个项目仅限于只有单个 doPost(e) 函数?
谢谢
最佳答案
doPost和doGet函数可能存在的问题是每个项目最多只能有一个doGet和一个doPost。这是因为这些函数使用共享资源,因此此类函数在一个项目的函数之间共享。
实际上有两种解决方法(至少我知道并且只测试了其中两种)来使用多个 doPost 查询,这些查询在一个项目中执行不同的操作。
最简单(也是最好)的方法是在单个 doPost 函数中使用不同的函数,每个需要 doPost 函数的任务都使用一个函数。 这里的技巧是,您需要在表单中添加一个隐藏字段,以帮助您区分项目中的不同表单。
然后您可以添加“if()else if()else” block 来根据隐藏字段的值选择正确的函数。
例如,如果您有两个功能,您可以执行以下操作:
function doGet(e){
var app=UiApp.createApplication();
some stuff;
return app;
}
function doPost(e){
some stuff
if(e.parameter.form=="value1"){
function1(e,otherParameters);
}
else if(e.parameter.form=="value2"){
function2(e,otherParameters);
}
else{
}
some other stuff
}
function function1(e,otherParameters){
var app=UiApp.getActiveApplication();
var panel=app.createVerticalPanel();
var formPanel=app.createFormPanel();
var button=app.createSubmitButton();
var formHidden=app.createHidden().setName("form");
other widgets;
panel.add(formHidden);
panel.add(other widgets);
panel.add(button);
formPanel.add(panel);
some stuff;
app.add(formPanel);
}
function function2(e,otherParameters){
var app=UiApp.getActiveApplication();
var panel=app.createVerticalPanel();
var formPanel=app.createFormPanel();
var button=app.createSubmitButton();
var formHidden=app.createHidden().setName("value2");
other widgets different from those in function1;
panel.add(formHidden);
panel.add(other widgets);
panel.add(button);
formPanel.add(panel);
some stuff different from what you have in function1;
app.add(formPanel);
}
您还可以创建另一个具有 doPost 函数的项目(例如 Project2),并将该项目部署为 Web 应用程序。
这个想法是,您可以使用 FormPanel 的 setAction("url") 方法将给定表单中的信息发送到某些 url。 使用此方法,您可以将表单内容发送到将处理您的查询的网页。因此,如果您将此方法的字符串值设置为您的网络应用程序的 url,您将向此应用程序发送 google-script 表单的内容。这个应用程序将使用其 doPost 函数来处理查询。
此选项开发起来有点困难,并且存在当前根本不处理来自 FileUpload 的 Blob 的缺点。
希望对你有帮助
干杯
尼古拉斯
关于google-apps-script - 谷歌脚本: multiple doPost in one project,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14249237/