doPost 和 doGet 函数可能存在的问题是每个项目最多只能有一个 doGet 和一个 doPost。这是因为这些功能使用共享资源,因此此类功能在一个项目的功能之间共享。
实际上有两种解决方法(至少我知道并且只测试了其中两种)来使用多个 doPost 查询,这些查询在一个项目中执行不同的操作。
最简单(也是最好的)方法是在单个 doPost 函数中使用不同的函数,每个任务都需要一个 doPost 函数。这里的诀窍是您需要在表单中添加一个隐藏字段,以帮助您区分项目中的不同表单。
然后您可以添加一个“if()else if()else”块来根据隐藏字段的值选择正确的函数。
例如,如果您有两个功能,您可以执行以下操作:
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 的缺点。
希望对你有帮助
干杯
尼古拉斯