我正在嘗試創建一個將結果發送到谷歌表格的表單。
從網站發送后,我得到“回應 200 成功”,但作業表未更新。但是從郵遞員那里沒有問題。
反應:
const handleSubmit: React.FormEventHandler<HTMLFormElement> = (event) => {
const formData = new FormData(event.currentTarget);
event.preventDefault();
var formObject = Object.fromEntries(formData.entries())
console.log(formObject)
const axios = require('axios')
const data = {
"organization": ['JD'],
"role": ['DJ'],
"twitter": ['aba'],
"email": ['[email protected]'],
}
console.log(JSON.stringify(data))
axios({
method: 'post',
url: googleForm,
data: data,
headers: {
'Content-Type': 'text/plain;charset=utf-8',
},
}).then(function (response) {
console.log("was this the response?", response);
}).catch(function (error) {
console.log(error);
});
};
應用腳本:
function doPost (e){
if(!e) return ContentService.createTextOutput("No e");
if(!e.parameters) return ContentService.createTextOutput("No params");
if(!e.parameters.email) return ContentService.createTextOutput("No email");
if(!e.parameters.twitter) return ContentService.createTextOutput("No twitter");
if(!e.parameters.organization) return ContentService.createTextOutput("No organization");
if(!e.parameters.role) return ContentService.createTextOutput("No role");
return addToDoc(e.parameters);
}
function addToDoc(parameters) {
// shortly after my original solution Google announced the LockService[1]
// this prevents concurrent access overwritting data
// we want a public lock, one that locks for all invocations
var lock = LockService.getDocumentLock();
lock.waitLock(30000); // wait 30 seconds before conceding defeat.
try {
// next set where we write the data - you could write to multiple/alternate destinations
var doc = SpreadsheetApp.openById(SCRIPT_PROP.getProperty("key"));
var sheet = doc.getSheetByName(SHEET_NAME);
var nextRow = sheet.getLastRow() 1; // get next row
var row = [];
// loop through the header columns
row.push(parameters.organization);
row.push(parameters.role);
row.push(parameters.twitter);
row.push(parameters.email);
// more efficient to set values as [][] array than individually
sheet.getRange(nextRow, 1, 1, row.length).setValues([row]);
// return json success results
return ContentService.createTextOutput(JSON.stringify({"result":"success", "row": nextRow})).setMimeType(ContentService.MimeType.JSON);
} catch(error){
return ContentService.createTextOutput(JSON.stringify({"result":"error", "error": error})).setMimeType(ContentService.MimeType.JSON);
} finally { //release lock
lock.releaseLock();
}
}
來自網站的請求回應: 網站請求
郵遞員的回應: {"result":"success","row":6}
任何想法如何解決?
uj5u.com熱心網友回復:
在您的情況下,如何進行以下修改?在本次修改中,doPost被修改。
修改后的腳本:
function doPost(e) {
if (!e) return ContentService.createTextOutput("No e");
var obj = JSON.parse(e.postData.contents);
if (!obj.email) return ContentService.createTextOutput("No email");
if (!obj.twitter) return ContentService.createTextOutput("No twitter");
if (!obj.organization) return ContentService.createTextOutput("No organization");
if (!obj.role) return ContentService.createTextOutput("No role");
return addToDoc(obj);
}
- 當你的 axios 運行時,值
data被放入e.postData.contentswhilee.parameters為空。我認為這可能是您的問題的原因。
筆記:
- 在您的腳本中,似乎使用了 Web 應用程式。在這種情況下,當您修改 Google Apps 腳本時,請將部署修改為新版本。這樣,修改后的腳本就會反映在 Web Apps 中。請注意這一點。
- 您可以在“在不更改新 IDE 的 Web 應用程式 URL 的情況下重新部署 Web 應用程式”的報告中查看詳細資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/426767.html
標籤:javascript 反应 谷歌应用脚本 谷歌表格 邮政
