Я новичок в Vue.js и javascript. Я пытаюсь отправить некоторые данные на страницу Google безуспешно.
Я нашел некоторую информацию о том, как разместить данные, но мои данные не сохраняются в форме. Поэтому я добавил пустую «форму» с данными, которые хочу опубликовать без удачи.
Это источник:
https://github.com/jamiewilson/form-to-google-sheets
а также:
Можно ли отправлять переменные js на листы Google? (Не данные формы)
Вот как я размещаю данные:
saveToGoogleSheet () {
const scriptURL = 'https://script.google.com/macros/s/.../exec'
const form = ''
var sendingData = new FormData(form)
sendingData.append('starRating', this.feedbackData.starRating)
fetch(scriptURL, {method: 'POST', body: new FormData(sendingData)})
.then(response => console.log('Success!', response))
.catch(error => console.error('Error!', error.message))
}
это скрипт google
var sheetName = 'Sheet1'
var scriptProp = PropertiesService.getScriptProperties()
function intialSetup () {
var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet()
scriptProp.setProperty('key', activeSpreadsheet.getId())
}
function doPost (e) {
var lock = LockService.getScriptLock()
lock.tryLock(10000)
try {
var doc = SpreadsheetApp.openById(scriptProp.getProperty('key'))
var sheet = doc.getSheetByName(sheetName)
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0]
var nextRow = sheet.getLastRow() + 1
var newRow = headers.map(function(header) {
return header === 'timestamp' ? new Date() : e.parameter[header]
})
sheet.getRange(nextRow, 1, 1, newRow.length).setValues([newRow])
return ContentService
.createTextOutput(JSON.stringify({ 'result': 'success', 'row': nextRow }))
.setMimeType(ContentService.MimeType.JSON)
}
catch (e) {
return ContentService
.createTextOutput(JSON.stringify({ 'result': 'error', 'error': e }))
.setMimeType(ContentService.MimeType.JSON)
}
finally {
lock.releaseLock()
}
}
После запуска приложения я получаю сообщение об успехе:
Success!
Response {type: "cors", url: "https://script.googleusercontent.com/macros/echo?u…xxx", redirected: true, status: 200, ok: true, …}
body: ReadableStream
bodyUsed: false
headers: Headers
__proto__: Headers
ok: true
redirected: true
status: 200
statusText: ""
type: "cors"
url: "https://script.googleusercontent.com/macros/echo?user_content_key=..."
__proto__: Response
но электронная таблица Google не заполняется, и все же данные существуют, если я его укажу.
1) Что я делаю не так?
2) Кроме того, есть ли способ отправить данные без добавления пустой формы?
3) Наконец, что если я хочу отправить больше данных, могу ли я сделать что-то вроде
sendingData.append({
'starRating' = this.feedbackData.starRating
'nowReading' = this.feedbackData.nowReading
})
или мне нужно сделать:
sendingData.append('starRating', this.feedbackData.starRating)
sendingData.append('nowReading', this.feedbackData.nowReading)
или что?
- ОБНОВЛЕНИЕ -
после публикации вопроса я решил начать заново с Google Sheet. в результате я теперь размещаю данные на листе, но они «неопределенные», несмотря на то, что данные есть до и после проводки:
console.log(this.feedbackData)
this.saveToGoogleSheet()
console.log(this.feedbackData)
Я попробовал одну переменную, как указано выше, или опубликовал все переменные одновременно (большинство из которых были «неопределенными» на момент публикации) следующим образом:
saveToGoogleSheet () {
const scriptURL = 'https://script.google.com/macros/s/.../exec'
fetch(scriptURL, {method: 'POST', body: JSON.stringify(this.feedbackData)})
.then(response => console.log('Success!', response))
.catch(error => console.error('Error!', error.message))
}
и вот так:
saveToGoogleSheet () {
const scriptURL = 'https://script.google.com/macros/s/.../exec'
fetch(scriptURL, {method: 'POST', body: this.feedbackData})
.then(response => console.log('Success!', response))
.catch(error => console.error('Error!', error.message))
}
но результат тот же.
Мой JSON.stringify (this.feedbackData) выглядит так:
{"userName":"","userNumber":"","friendName":"","friendNumber":"","inviteMessage":"","nowReading":"S2/E1/","starRating":"4"}