teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

解決方法について、別の方法があることを記載

2017/11/29 02:16

投稿

hiroki_s
hiroki_s

スコア13

title CHANGED
File without changes
body CHANGED
@@ -73,8 +73,8 @@
73
73
 
74
74
  よろしくお願いいたします。
75
75
 
76
- ##追記 解決方法(仮)
76
+ ##追記 解決方法
77
- 実現は出来ましたが、最適解ではないかもしれません。またで編集する予定です。
77
+ 以下コードで実現は出来ましたが、最適解ではないかもしれません。(述)
78
78
 
79
79
  ```JavaScript
80
80
  $('form').submit(function(event) {
@@ -112,4 +112,8 @@
112
112
  $form.enable();
113
113
  });
114
114
  });
115
- ```
115
+ ```
116
+
117
+ タイトルと異なってしまいますが、元々やりたかったことは、「グループ分けした情報をネストしたJSONで送りたい」となります。
118
+
119
+ ここに載せたコードでは、formを設置し、formから取得した値をjQueryのajaxで送信していますが、フォームを設置せず、「複数の input をグループ分けして、 $('#hoge').click(function(){ でグループのidなどでから内容を取得し、JSONを組み立てて送信する。」という方法の方がシンプルかもしれません。

3

解決について補足

2017/11/29 02:16

投稿

hiroki_s
hiroki_s

スコア13

title CHANGED
File without changes
body CHANGED
@@ -56,7 +56,6 @@
56
56
  url: $form.attr('action'),
57
57
  type: $form.attr('method'),
58
58
  data: tmpData,
59
- // 間違い dataType:'json',
60
59
  timeout: 5000,
61
60
 
62
61
  }).done(function(result, textStatus, xhr){
@@ -75,7 +74,7 @@
75
74
  よろしくお願いいたします。
76
75
 
77
76
  ##追記 解決方法(仮)
78
- 実現できたのでそれを記載しが、回答者さんからの情報追記するかもしれません。
77
+ 実現は出来したが、最適解はないかもしれません。また後で編集する予定です。
79
78
 
80
79
  ```JavaScript
81
80
  $('form').submit(function(event) {
@@ -102,8 +101,7 @@
102
101
  url: $form.attr('action'),
103
102
  type: $form.attr('method'),
104
103
  data: jsonStr,
105
- contentType: 'application/json', // <---修正部分
104
+ contentType: 'application/json',
106
- // 間違い dataType:'json',
107
105
  timeout: 5000, // 単位はミリ秒
108
106
 
109
107
  }).done(function(result, textStatus, xhr){

2

JavaScriptのコードに間違いがあったため修正

2017/11/17 09:08

投稿

hiroki_s
hiroki_s

スコア13

title CHANGED
File without changes
body CHANGED
@@ -46,8 +46,6 @@
46
46
  event.preventDefault();
47
47
  // 操作対象のフォーム要素を取得
48
48
  var $form = $(this);
49
- // 送信ボタンを取得
50
- var $button = $form.find('button');
51
49
  // フォームのデータをDisableにする前に取得
52
50
  var tmpData = $form.serializeArray();
53
51
  // フォーム無効化
@@ -58,7 +56,7 @@
58
56
  url: $form.attr('action'),
59
57
  type: $form.attr('method'),
60
58
  data: tmpData,
61
- dataType:'json',
59
+ // 間違い dataType:'json',
62
60
  timeout: 5000,
63
61
 
64
62
  }).done(function(result, textStatus, xhr){
@@ -85,9 +83,6 @@
85
83
  event.preventDefault();
86
84
  // 操作対象のフォーム要素を取得
87
85
  var $form = $(this);
88
- // 送信ボタンを取得
89
- var $button = $form.find('button');
90
-
91
86
  // フォームのデータをDisableにする前に取得
92
87
  var className = $form["0"].className; // <---修正部分
93
88
  var tmpData = $form.serializeArray();
@@ -108,7 +103,7 @@
108
103
  type: $form.attr('method'),
109
104
  data: jsonStr,
110
105
  contentType: 'application/json', // <---修正部分
111
- dataType:'json',
106
+ // 間違い dataType:'json',
112
107
  timeout: 5000, // 単位はミリ秒
113
108
 
114
109
  }).done(function(result, textStatus, xhr){

1

解決方法(仮)の追記

2017/11/16 09:26

投稿

hiroki_s
hiroki_s

スコア13

title CHANGED
File without changes
body CHANGED
@@ -74,4 +74,49 @@
74
74
  ###補足情報
75
75
  フォームが複数あり、出来れば、共通のsubmitを使用したいと考えていますが、Web開発は初めてですので、この考え方自体がおかしかったら教えてください。
76
76
 
77
- よろしくお願いいたします。
77
+ よろしくお願いいたします。
78
+
79
+ ##追記 解決方法(仮)
80
+ 実現できたのでそれを記載しますが、回答者さんからの情報で追記するかもしれません。
81
+
82
+ ```JavaScript
83
+ $('form').submit(function(event) {
84
+ // HTMLでの送信をキャンセル
85
+ event.preventDefault();
86
+ // 操作対象のフォーム要素を取得
87
+ var $form = $(this);
88
+ // 送信ボタンを取得
89
+ var $button = $form.find('button');
90
+
91
+ // フォームのデータをDisableにする前に取得
92
+ var className = $form["0"].className; // <---修正部分
93
+ var tmpData = $form.serializeArray();
94
+
95
+ // フォーム無効化
96
+ $form.disable();
97
+
98
+ // 修正部分
99
+ var jsonStrBase = '{"' + className + '":{"';
100
+ for(var i in tmpData ){
101
+ jsonStrBase = jsonStrBase + tmpData[i].name + '": "' + tmpData[i].value +'","'
102
+ }
103
+ var jsonStr = jsonStrBase.slice(0, -2) + '}}'
104
+
105
+ // 送信
106
+ $.ajax({
107
+ url: $form.attr('action'),
108
+ type: $form.attr('method'),
109
+ data: jsonStr,
110
+ contentType: 'application/json', // <---修正部分
111
+ dataType:'json',
112
+ timeout: 5000, // 単位はミリ秒
113
+
114
+ }).done(function(result, textStatus, xhr){
115
+ alert('OK');
116
+ }).fail(function(xhr, textStatus, error){
117
+ alert('NG...');
118
+ }).always(function(xhr, textStatus){
119
+ $form.enable();
120
+ });
121
+ });
122
+ ```