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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

JavaScript

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

Q&A

解決済

1回答

3943閲覧

Vue.jsの中でpostすると2重送信してしまい困っています。

退会済みユーザー

退会済みユーザー

総合スコア0

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

JavaScript

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

0グッド

0クリップ

投稿2021/01/13 06:20

編集2021/01/13 06:32

Vue.jsの中でpostすると2重送信してしまい困っています。

下記はaxiosでpostを試しているコードです。
また、javascriptのfetch、jqueryの$.ajaxでも試してみましたが同様の現象が起きています。

どなたかご教授をお願いします。

scriptはhtml内から下記で読込してます。

html

1<script src="~/lib/vue/vue.global.js"></script> 2<script src="~/lib/axios/axios.js"></script>

実行しているコード

javascript

1const app = Vue.createApp({ 2 methods: { 3 onModalSubmitClicked() { 4 axios({ 5 method: "POST", 6 url: "/Members/Edit/", 7 data: JSON.stringify({ Id: 1, Name: "TEST1"}) // サーバー側の都合によりPost時のみアッパーキャメルケースです 8 }).then((response) => { 9 alert("a"); 10 }); 11 } 12 }, 13});

キャプチャソフトでモニタリングしてみましたが、6046の行にはデータ有り、
6047の行にはデータがないのですが、クエリ文字列で表示されてます。

キャプチャデータ

txt

1# Result Protocol Host URL Body Caching Content-Type Process Comments Custom 26046 - HTTPS localhost:50000 /Members/Edit/ -1 chrome:15064 36047 - HTTPS localhost:50000 /Members/Edit/?Id=11&Name=%E9...

6046行のjsonデータ

txt

1{"Id":1,"name":"TEST1"}

サーバー側のコントローラになります。

C#

1public async Task<IActionResult> Edit(Member member) {

Viewになります。
このコードでaspのタグを使用していますが、nameとして使用しているのみです。
Vueのコードではmemberを省略してますが、実際には記載しています。

html

1 <form id="form0"> 2 <div class="modal-content"> 3 <div class="modal-body"> 4 <div class="form-horizontal"> 5 <input type="hidden" asp-for="Id" v-if="member" v-bind:value.trim="member.Id" /> 6 7 <div class="form-group row"> 8 <div class="col-md-3"> 9 <label asp-for="Name"> 10 </div> 11 <div class="col-md-9"> 12 <input asp-for="Name" class="form-control form-control-sm" style="width: 100%;" v-if="member" ref="focusModal" v-bind:value.trim="member.Name" /> 13 </div> 14 </div> 15 </div> 16 </div> 17 18 <div class="modal-footer"> 19 <button type="button" id="modalSubmit" class="btn btn-primary btn-sm" v-bind:disabled="isDisabled" v-on:click="onModalSubmitClicked">更新</button> 20 </div> 21 </div> 22 </form>

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

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

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

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

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

m.ts10806

2021/01/13 06:25

肝心のフォームの方はどのような作りになっているのでしょうか。 VIEW側のコードもご提示ください。
退会済みユーザー

退会済みユーザー

2021/01/13 06:35 編集

コメントありがとうございます。 Viewを追加しました。 このコードでaspのタグを使用していますが、nameとして使用しているのみです。(javascriptから送信することにしているので、不要になってしまいましたが。) また、Vueのコードではmemberを省略してますが、実際には記載しています。 よろしくお願いします。
mikkame

2021/01/13 06:37

type="button" って書いてあるので考えにくいですが、form自体のsubmitが走ってるように見えますね・・・
退会済みユーザー

退会済みユーザー

2021/01/13 06:47

ご指摘のとおり、form自体のsubmitが走っていまして、 javascript中で document.getElementById("form0").submit(); をしていました。 些細なミスでご迷惑おかけし申し訳ございません。
m.ts10806

2021/01/13 06:48

もしそれで解決でしたら、自身で解決内容として具体的に回答として投稿して解決済みにしてください。 質問に提示されたコードにはない内容なので、その辺も考慮してもらえると。
退会済みユーザー

退会済みユーザー

2021/01/13 06:56

自己解決欄に実際のコードを記載させて頂きました。 ご迷惑をおかけしました。 アドバイス頂きありがとうございます。
guest

回答1

0

ベストアンサー

実際のコードが長くなっていまして、javascript中のsubmitを消すのを忘れていたのが原因です。
ご迷惑おかけしました。

javascript

1onModalSubmitClicked() { 2 // jQuery validation 3 if (!$("#form0").valid()) { 4 return; 5 } 6 7 var id = this.member.Id; 8 var checkText = this.member.DepartmentName; 9 10 // クライアント側チェック処理など(サーバー側でも実施) 11 // ... 12 // ... 13 // ... 14 15 // submitを削除していなかった 16 // document.getElementById("form0").submit(); 17 18 // headerに入れる 19 // var token = document.getElementsByName("__RequestVerificationToken")[0].value; 20 21 // var test = JSON.stringify(this.member); 22 23 axios.post(this.url, { 24 data: JSON.stringify(this.member) 25 }).then((response) => { 26 if (response.ok) { 27 this.onSuccess(); 28 } else { 29 this.onFailure(response.message); 30 } 31 }).catch((response) => { 32 this.onFailure(response.message); 33 }); 34 },

投稿2021/01/13 06:56

編集2021/01/13 07:00
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

m.ts10806

2021/01/13 06:57

あ、えーと。 回答でもマークダウン使えますので、codeのほうを。
退会済みユーザー

退会済みユーザー

2021/01/13 07:01

失礼しました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問