回答編集履歴

2

脱字修正

2025/03/26 06:28

投稿

utm.
utm.

スコア676

test CHANGED
@@ -15,10 +15,10 @@
15
15
  調べてみると思ったより情報が少なかったので、ナレッジになればいいと思い投稿することにしました。
16
16
  コードはAIに書いてもらいました。
17
17
  GetバージョンとPostバージョンを両方書くのが面倒だったので、自動で内容が変わるようにしています。
18
- * 下記のコードはすべて動作未検証です。問題があれば回答を編集していきます。
18
+ *下記のコードはすべて動作未検証です。問題があれば回答を編集していきます。
19
19
 
20
20
  バニラjsだとこんな感じ
21
- FormDataとクラスがあるようです。
21
+ FormDataというクラスがあるようです。
22
22
 
23
23
  引用
24
24
  FormData

1

追記しました。

2025/03/26 06:27

投稿

utm.
utm.

スコア676

test CHANGED
@@ -10,4 +10,101 @@
10
10
 
11
11
  (質問に記載がないけれど、jQueryでデータを持たす方法は基礎だと思うので割愛)
12
12
 
13
+ ---
14
+ 追記。
15
+ 調べてみると思ったより情報が少なかったので、ナレッジになればいいと思い投稿することにしました。
16
+ コードはAIに書いてもらいました。
17
+ GetバージョンとPostバージョンを両方書くのが面倒だったので、自動で内容が変わるようにしています。
18
+ * 下記のコードはすべて動作未検証です。問題があれば回答を編集していきます。
13
19
 
20
+ バニラjsだとこんな感じ
21
+ FormDataとクラスがあるようです。
22
+
23
+ 引用
24
+ FormData
25
+ https://developer.mozilla.org/ja/docs/Web/API/XMLHttpRequest_API/Using_FormData_Objects
26
+ GET送信について
27
+ https://developer.mozilla.org/ja/docs/Web/API/FormData
28
+ ```js
29
+ const form = document.querySelector("form");
30
+ const formData = new FormData(form);
31
+ const method = form.method.toUpperCase(); // フォームの method を取得 (大文字変換)
32
+ const url = form.action
33
+
34
+ if (method === "GET") {
35
+ const params = new URLSearchParams(formData).toString();
36
+ url += `?${params}`;
37
+ }
38
+
39
+ // fetch オプションを作成
40
+ const options = { method };
41
+ if (method === "POST") {
42
+ options.body = formData;
43
+ }
44
+
45
+ // fetch 実行(thenを使用)
46
+ fetch(url, options)
47
+ .then(response => response.json())
48
+ .then(data => console.log(data))
49
+ .catch(error => console.error("Error:", error))
50
+ .finally(() => console.log("done"));
51
+ ```
52
+
53
+ jQueryだとこんな感じ
54
+ (serializeArrayを使うように指示しました)
55
+ ```js
56
+ const $form = $("form");
57
+ const method = $form.attr("method"); // デフォルトは POST
58
+ const url = $form.attr("action"); // `action` の URL を取得
59
+ const data = $form.serializeArray();
60
+
61
+ $.ajax({
62
+ url: url,
63
+ method: method,
64
+ data: data
65
+ })
66
+ .done(function(response) {
67
+ console.log(response);
68
+ })
69
+ .fail(function(jqXHR, textStatus, errorThrown) {
70
+ console.error("Error:", textStatus, errorThrown);
71
+ })
72
+ .always(function() {
73
+ console.log("done");
74
+ });
75
+ ```
76
+
77
+ jQueryでsuccessを使用する
78
+ ```js
79
+ const $form = $("form");
80
+ const method = $form.attr("method"); // デフォルトは POST
81
+ const url = $form.attr("action"); // `action` の URL を取得
82
+ const data = $form.serializeArray()
83
+
84
+ $.ajax({
85
+ url: url,
86
+ method: method,
87
+ data: data,
88
+ success: function(response) {
89
+ console.log(response);
90
+ },
91
+ error: function(jqXHR, textStatus, errorThrown) {
92
+ console.error("Error:", textStatus, errorThrown);
93
+ },
94
+ complete: function() {
95
+ console.log("done");
96
+ }
97
+ });
98
+ ```
99
+
100
+ ちなみに、ほかの投稿で上がっているsuccessの使用についての意見はコメントにある通り、メソッドの話です。
101
+ うまくまとめているサイトがありました。
102
+ https://freelance-jak.com/technology/jquery/1276/
103
+
104
+ そしてもう一つ、
105
+ successをオプションとして渡すことよりdoneのほうがいい点については
106
+ successをオプションとして渡すとその中でしか処理を書けないので、doneでチェーンすれば、チェーンで次へ次へと書けるという点が挙げられます。
107
+ あるfetchをした後にべつのfetchをしたいという場合、doneのメソッド内でreturnで返せば次の処理を書けますが、successの使用ではどんどんネストするしかないためコールバック地獄と呼ばれるものになります。
108
+ まあ、でも基本的にはそんなコードを書くことはないので、その特徴さえ知っていれば(理解できているのであれば)特に気にしなくていいと思います。
109
+ もちろん、良い方法に合わせているほうが後からコード追加するときだとか開発中にスムーズにコードをかけるんですけど。
110
+ 実際に開発初期に色々と整理していると、何も悩まずに開発ができるのでスムーズです。