Если я использую две одинаковые формы, но у одной есть метод GET, а у другой - метод POST, когда я их запускаю, одна использует doGet, а другая - doPost (). Но этого не происходит, когда я делаю то же самое с командой UrlFetch (), предоставляя входные данные из подсказки.
html:
Верхняя форма - это GET и нижняя форма POST.
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<h3>GET</h3>
<form action="https://script.google.com/a/cooper/macros/s/AKfycbzlYgw2cw8q7u9qTxM/exec" enctype="application/x-www-form-urlencoded" method="GET">
<input type="text" name="one" value="" />
<br /><input type="text" name="two" value="" />
<br /><textarea rows="2" cols="25" name="three" placeholder="Enter Text Here"></textarea>
<br /><input type="submit" value="Submit" />
</form>
<h3>POST</h3>
<form action="https://script.google.com/a/cooper/macros/s/AKfycbzlYgw2cw8q7u9qTxM/exec" enctype="application/x-www-form-urlencoded" method="POST">
<input type="text" name="one" value="" />
<br /><input type="text" name="two" value="" />
<br /><textarea rows="2" cols="25" name="three" placeholder="Enter Text Here"></textarea>
<br /><input type="submit" value="Submit" />
</form>
</body>
</html>
Code.gs:
function doGet(e){
Logger.log('doGet: %s',JSON.stringify(e));
if(e.parameter) {
var data=e.parameter;
handleFunction(data,'get');//This hardwires the term get to the ouput
}
return HtmlService.createHtmlOutputFromFile('testing');
}
function doPost(e){
console.log('doPost Entry',JSON.stringify(e));
if(e.postData.length!=-1) {
var data=e.parameter;
handleFunction(data,'post');//This hardwires the term post to the ouput
}
return ContentService.createTextOutput('doPost Return:' + JSON.stringify(e.postData.contents));
}
function handleFunction(data,source){
console.log('handleFunction Entry: %s',JSON.stringify(data));
var one=data.one;
var two=data.two;
var three=data.three;
var ss=SpreadsheetApp.getActive();
var sheet=ss.getActiveSheet();
sheet.appendRow([source,one,two,three]);
}
function postit() {
// DriveApp.getFiles() //I copied this from a Tanaike example. I don't know if I need it still
var ask=SpreadsheetApp.getUi().prompt("Enter first/second/third/method", SpreadsheetApp.getUi().ButtonSet.OK)
if(ask.getSelectedButton()==SpreadsheetApp.getUi().Button.OK) {
var dA=ask.getResponseText().split('/');//Just an easy way to get 4 pieces of data at one time
if(dA.length==4) {
var url=ScriptApp.getService().getUrl();
var data={"one":dA[0],"two":dA[1],"three":dA[2]};
//the method is provide from the last term of the above prompt
var options={"method":dA[3],"payload":data,"headers":{"Authorization":"Bearer " + ScriptApp.getOAuthToken()},"muteHttpExceptions": true};
var resp=UrlFetchApp.fetch(url, options);
Logger.log('UrlFetch Response: %s',resp);
}
}
}
Анимация:
Это что Я закончил с этим, и он работает в Rhino и V8
function postit() {
// DriveApp.getFiles()
var ask=SpreadsheetApp.getUi().prompt("Enter first/second/third/method", SpreadsheetApp.getUi().ButtonSet.OK);
if(ask.getSelectedButton()==SpreadsheetApp.getUi().Button.OK) {
var dA=ask.getResponseText().split('/');
if(dA.length==4) {
if(dA[3]=="POST") {
var url=ScriptApp.getService().getUrl();
var data={"one":dA[0],"two":dA[1],"three":dA[2]};
var options={"method":dA[3],"payload":data,"headers":{"Authorization":"Bearer " + ScriptApp.getOAuthToken()},"muteHttpExceptions": true};
}else if(dA[3]=="GET") {
var url=Utilities.formatString('%s?one=%s&two=%s&three=%s',ScriptApp.getService().getUrl(),dA[0],dA[1],dA[2]);
var data={"one":dA[0],"two":dA[1],"three":dA[2]};
var options={"method":dA[3],"headers":{"Authorization":"Bearer " + ScriptApp.getOAuthToken()},"muteHttpExceptions": true};
}
var resp=UrlFetchApp.fetch(url, options);
}
}
}