実現したいこと
- フォームに入力された情報をDiscordに送信する
発生している問題・エラーメッセージ
フォームを送信してもエラーがでてしまいます
TypeError: Cannot read property '0' of undefined at onSubmit(コード:14:52)
該当のソースコード
流出を防ぐためメッセージを数字に変えています
JavaScript
1function onSubmit(e) { 2const webhookURL = 'WebhookのURL'; 3 4let messageBody = ''; 5 6//messageBody += `entry\n`; 7messageBody += `entry:${e.namedValues['タイムスタンプ'][0]}\n`; 8messageBody += `----------\n`; 9 10messageBody += `1\n`; 11messageBody += `${e.namedValues['1'][0]}\n\n`; 12 13messageBody += `2\n`; 14messageBody += `${e.namedValues['2'][0]}\n\n`; 15 16messageBody += `3\n`; 17messageBody += `${e.namedValues['3'][0]}\n`; 18 19messageBody += `4\n`; 20messageBody += `${e.namedValues['4'][0]}\n\n`; 21 22messageBody += `5`; 23messageBody += `${e.namedValues['5'][0]}\n`; 24 25messageBody += `6\n`; 26messageBody += `${e.namedValues['6'][0]}\n\n`; 27 28messageBody += `7\n`; 29messageBody += `${e.namedValues['7'][0]}\n`; 30 31messageBody += `8\n`; 32messageBody += `${e.namedValues['8'][0]}\n\n`; 33 34messageBody += `9\n`; 35messageBody += `${e.namedValues['9'][0]}\n\n`; 36 37messageBody += `10\n`; 38messageBody += `${e.namedValues['10'][0]}\n\n`; 39 40messageBody += `11\n`; 41messageBody += `${e.namedValues['11'][0]}\n`; 42 43messageBody += `12\n`; 44messageBody += `${e.namedValues['12'][0]}\n\n`; 45 46messageBody += `13\n`; 47messageBody += `${e.namedValues['13'][0]}\n`; 48 49messageBody += `----------\n`; 50 51 52const message = { 53'content': messageBody, 54'tts': false, 55} 56 57const param = { 58'method': 'POST', 59'headers': { 'Content-type': 'application/json' }, 60'payload': JSON.stringify(message) 61} 62 63UrlFetchApp.fetch(webhookURL, param); 64}
試したこと
[0]の0を1や2に変えてみましたが変わりませんでした。
落ち着いて、まずはエラーメッセージを読んでみてください
英語がわからないのであれば、Google翻訳やDeepLに頼ってみましょう
> TypeError: 未定義のプロパティ '0' を読み取れません
というように出てくるので、つまり、当該のコードの14行目に於いて、 `e.namedValues['1'][0]` ですかね、このときに `e.namedValues['1']` の中には配列の、少なくとも0のインデックスを持つものは存在しないということがエラーに出力されていることがわかると思います
ですので、まずは当該の function の中で `console.log(e)` してみた結果を貼り付けてみていただいてもよろしいでしょうか?
実行すると下記のエラーが出てきてしまいます
TypeError: Cannot read property 'namedValues' of undefined
onSubmit @ コード.gs:9
良いですね、一歩前進しました
つまり `e` というオブジェクトは、そもそも `namedValues` というプロパティを持っていないことが、これで分かったわけです
実際にどのようにデバッグコード(`console.log(e)`のこと)を差し込まれたかがわからないのですが、 `e` にはどのようなプロパティが含まれているかはお分かりになられますか?
初めて触ったので理解できていないのですが、
pythonでいうと
def onSubmit(e):
ということですか?
とすると空…?ですかね…?
下記、ちょっと厳しいことを申し上げるのですが、臆することなくどんどん質問してください
> pythonでいうと
> def onSubmit(e):
> ということですか?
何に対する質問なのかがちょっと理解できていないのですが
質問の本文に記載いただいている `function onSubmit(e) { ... }` については、pythonに於ける `def onSubmit(e):` と同じものです
つまり、 `onSubmit` という名前の関数は、呼び出し時に `e` という、少なくともひとつの引数を要求している形ですね
多分ご理解いただけていないので、下記にやってほしいことを記述しますね
```
function onSubmit(e) {
const webhookURL = 'WebhookのURL';
// :
// :
UrlFetchApp.fetch(webhookURL, param);
}
```
とご記載いただいておりますが、その冒頭部分を次のように変更して実行した場合の出力内容はどのようなものでしょうか?
```
function onSubmit(e) {
console.log(e);
const webhookURL = 'WebhookのURL';
```
で、もしその結果、「eの中身が空だ」とおっしゃるのでしたら、即ち、 `onSubmit()` を呼び出す際に引数の指定がなされていないものだと考えます
理解できていなくてすみません。
同じエラーが出ました
TypeError: Cannot read property 'namedValues' of undefined
そのエラーメッセージのみしか出力されておりませんでしょうか?
例えば私の方で試した例を示しますが、開発者ツールなどの欄に `undefined` など、何かしら他に表示されておりませんでしょうか?
https://ideone.com/ZFP8yX
undefinedも表示されていました
https://gyazo.com/7c7ebddd73d4f5eb5376bb6075529ce2
適切にご回答いただきまして、ありがとうございます
すばらしい、やはり、おそらく引数が渡されていないことがわかりましたね
では、 `onSubmit()` の呼び元で、指定したいデータを引数として渡してあげていただいてもよろしいでしょうか?
それでおそらく問題は解決します
格闘してたら一時間経っていました笑
遂に遂にできました!!
無知な僕に丁寧に教えてくださってありがとうございました!
はい、よかったです!
解決したのでしたら、下記回答をBAにご指定いただければと思います
また、今後のソフトウェア開発に於いては、よろしければ次のことを意識してみてください
1. 標準出力(stdout)や標準エラー出力(stderr)、あるいはブラウザの開発者ツールのコンソール部に表示される、通常の出力やエラー出力をよく読んでみてください
2. エラー出力が発生した際は、エラーの内容をよく読んでください、また、英語がわからない場合は翻訳ツールを使用してみてください
3. エラーを読んでもわからない場合は、そのエラーメッセージでGoogle検索をしてみてください
4. C/C++やIDEが使用できる環境でしたら、gdbなどのデバッグツールやブレークポイントを貼るなどをして、実行している状態を追ってみてください。また、デバッグツールが使用できない場合も「printfデバッグ」と言って、今回やったような、とりあえず出力にデータの状態を表示してみるデバッグ手法が非常に有効です
discordBOTの作成、頑張ってくださいね
回答1件
あなたの回答
tips
プレビュー