質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

747閲覧

フォームに入力された情報をDiscordに送信したい

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

2クリップ

投稿2022/08/14 03:25

実現したいこと

  • フォームに入力された情報を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に変えてみましたが変わりませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cocoalix

2022/08/14 03:44

落ち着いて、まずはエラーメッセージを読んでみてください 英語がわからないのであれば、Google翻訳やDeepLに頼ってみましょう > TypeError: 未定義のプロパティ '0' を読み取れません というように出てくるので、つまり、当該のコードの14行目に於いて、 `e.namedValues['1'][0]` ですかね、このときに `e.namedValues['1']` の中には配列の、少なくとも0のインデックスを持つものは存在しないということがエラーに出力されていることがわかると思います ですので、まずは当該の function の中で `console.log(e)` してみた結果を貼り付けてみていただいてもよろしいでしょうか?
退会済みユーザー

退会済みユーザー

2022/08/14 04:45

実行すると下記のエラーが出てきてしまいます TypeError: Cannot read property 'namedValues' of undefined onSubmit @ コード.gs:9
cocoalix

2022/08/14 04:49

良いですね、一歩前進しました つまり `e` というオブジェクトは、そもそも `namedValues` というプロパティを持っていないことが、これで分かったわけです 実際にどのようにデバッグコード(`console.log(e)`のこと)を差し込まれたかがわからないのですが、 `e` にはどのようなプロパティが含まれているかはお分かりになられますか?
退会済みユーザー

退会済みユーザー

2022/08/14 05:08 編集

初めて触ったので理解できていないのですが、 pythonでいうと def onSubmit(e): ということですか? とすると空…?ですかね…?
cocoalix

2022/08/14 05:13

下記、ちょっと厳しいことを申し上げるのですが、臆することなくどんどん質問してください > 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'; ```
cocoalix

2022/08/14 05:15

で、もしその結果、「eの中身が空だ」とおっしゃるのでしたら、即ち、 `onSubmit()` を呼び出す際に引数の指定がなされていないものだと考えます
退会済みユーザー

退会済みユーザー

2022/08/14 05:30

理解できていなくてすみません。 同じエラーが出ました TypeError: Cannot read property 'namedValues' of undefined
cocoalix

2022/08/14 05:33

そのエラーメッセージのみしか出力されておりませんでしょうか? 例えば私の方で試した例を示しますが、開発者ツールなどの欄に `undefined` など、何かしら他に表示されておりませんでしょうか? https://ideone.com/ZFP8yX
cocoalix

2022/08/14 05:41

適切にご回答いただきまして、ありがとうございます すばらしい、やはり、おそらく引数が渡されていないことがわかりましたね では、 `onSubmit()` の呼び元で、指定したいデータを引数として渡してあげていただいてもよろしいでしょうか? それでおそらく問題は解決します
退会済みユーザー

退会済みユーザー

2022/08/14 06:44

格闘してたら一時間経っていました笑 遂に遂にできました!! 無知な僕に丁寧に教えてくださってありがとうございました!
cocoalix

2022/08/14 06:49

はい、よかったです! 解決したのでしたら、下記回答をBAにご指定いただければと思います また、今後のソフトウェア開発に於いては、よろしければ次のことを意識してみてください 1. 標準出力(stdout)や標準エラー出力(stderr)、あるいはブラウザの開発者ツールのコンソール部に表示される、通常の出力やエラー出力をよく読んでみてください 2. エラー出力が発生した際は、エラーの内容をよく読んでください、また、英語がわからない場合は翻訳ツールを使用してみてください 3. エラーを読んでもわからない場合は、そのエラーメッセージでGoogle検索をしてみてください 4. C/C++やIDEが使用できる環境でしたら、gdbなどのデバッグツールやブレークポイントを貼るなどをして、実行している状態を追ってみてください。また、デバッグツールが使用できない場合も「printfデバッグ」と言って、今回やったような、とりあえず出力にデータの状態を表示してみるデバッグ手法が非常に有効です discordBOTの作成、頑張ってくださいね
guest

回答1

0

ベストアンサー

もしかしたら解答にしないと気づかれないかもしれませんので、こちらにも記載致しますね

落ち着いて、まずはエラーメッセージを読んでみてください
英語がわからないのであれば、Google翻訳やDeepLに頼ってみましょう

TypeError: 未定義のプロパティ '0' を読み取れません

というように出てくるので、つまり、当該のコードの14行目に於いて、 e.namedValues['1'][0] ですかね、このときに e.namedValues['1'] の中には配列の、少なくとも0のインデックスを持つものは存在しないということがエラーに出力されていることがわかると思います

ですので、まずは当該の function の中で console.log(e) してみた結果を貼り付けてみていただいてもよろしいでしょうか?

また、多分 console.log(e) の内容を貼り付けると、データの参照の仕方が誤っていることに気づかれるのではないかと思います、もし、そうでしたら、必要な情報を取得するように修正してみてください

回答追記:
console.log(e) の結果、 undefined が出力されていたことが質問者への質問によって判明
当該の関数 onSubmit() に、内部で処理させたいデータを持つ変数を呼び出し時に渡すことで解決する旨を伝達
上記によって解決が確認された
回答としては以上でクローズ

投稿2022/08/14 04:26

編集2022/08/14 06:51
cocoalix

総合スコア62

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問