回答編集履歴

3

訂正

2022/08/28 06:31

投稿

退会済みユーザー
test CHANGED
@@ -32,7 +32,7 @@
32
32
 
33
33
  ・・・とのことですので、こちらの環境でそれをやってみましたが、そのままコピーして同じ結果になります。
34
34
 
35
- まず、上に書いたサンプルを少し変更して要求ヘッダに Content-Type: application/json 追加しホームデータとして JSON 文字列 {"answer":42} を送信するようにして実行し、Chrome 104.0.5112.102 のディベロッパーツールの Copy as fetch でスクリプトを取得します。
35
+ まず、上に書いたサンプルを少し変更して要求ヘッダに Content-Type: application/json 追加しホームデータとして JSON 文字列 {"answer":42} を送信するようにして実行し、Chrome 104.0.5112.102 のディベロッパーツールの Copy as fetch でスクリプトを取得します。
36
36
 
37
37
  取得したスクリプトをそのままコピペしてもう一つ fetch するメソッドを作り、両方一緒に実行してみました。
38
38
 

2

追記&修正

2022/08/28 06:30

投稿

退会済みユーザー
test CHANGED
@@ -32,7 +32,7 @@
32
32
 
33
33
  ・・・とのことですので、こちらの環境でそれをやってみましたが、そのままコピーして同じ結果になります。
34
34
 
35
- まず、上に書いたサンプルを少し変更してヘッダホームデータを送信するようにして実行し、Chrome 104.0.5112.102 のディベロッパーツールの Copy as fetch でスクリプトを取得します。
35
+ まず、上に書いたサンプルを少し変更して要求ヘッダに Content-Type: application/json 追加しホームデータとして JSON 文字列 {"answer":42} を送信するようにして実行し、Chrome 104.0.5112.102 のディベロッパーツールの Copy as fetch でスクリプトを取得します。
36
36
 
37
37
  取得したスクリプトをそのままコピペしてもう一つ fetch するメソッドを作り、両方一緒に実行してみました。
38
38
 

1

追記

2022/08/28 04:34

投稿

退会済みユーザー
test CHANGED
@@ -21,3 +21,107 @@
21
21
  window.onload = async function () { getData(); await getData2(); }
22
22
  </script>
23
23
  ```
24
+
25
+ ---
26
+
27
+ **【追記】**
28
+
29
+ 下のコメント欄の 2022/08/28 12:58 の私のコメントで「あとで回答欄に追記しておきます」と書いた件です。
30
+
31
+ > ブラウザの「fetchとしてコピー」でとったやつを変数に分解して入れただけです
32
+
33
+ ・・・とのことですので、こちらの環境でそれをやってみましたが、そのままコピーして同じ結果になります。
34
+
35
+ まず、上に書いたサンプルを少し変更してヘッダとホームデータを送信するようにして実行し、Chrome 104.0.5112.102 のディベロッパーツールの Copy as fetch でスクリプトを取得します。
36
+
37
+ 取得したスクリプトをそのままコピペしてもう一つ fetch するメソッドを作り、両方一緒に実行してみました。
38
+
39
+ 以下がそのコードです。getData() が元になるもの、getData3() が Copy as fetch で取得したスクリプトをベースに作ったものです。
40
+
41
+
42
+ ```
43
+ <!DOCTYPE html>
44
+
45
+ <html xmlns="http://www.w3.org/1999/xhtml">
46
+ <head runat="server">
47
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
48
+ <title></title>
49
+ <script type="text/javascript">
50
+ function getData() {
51
+ fetch("handler2.ashx", {
52
+ method: "POST",
53
+ headers: { 'Content-Type': 'application/json' },
54
+ body: JSON.stringify({ answer: 42 })
55
+ })
56
+ .then(response => response.json())
57
+ .then(data => console.log(data))
58
+ }
59
+
60
+ function getData3() {
61
+ fetch("https://localhost:44331/handler2.ashx", {
62
+ "headers": {
63
+ "accept": "*/*",
64
+ "accept-language": "ja,en-US;q=0.9,en;q=0.8,de;q=0.7",
65
+ "content-type": "application/json",
66
+ "sec-ch-ua": "\"Chromium\";v=\"104\", \" Not A;Brand\";v=\"99\", \"Google Chrome\";v=\"104\"",
67
+ "sec-ch-ua-mobile": "?0",
68
+ "sec-ch-ua-platform": "\"Windows\"",
69
+ "sec-fetch-dest": "empty",
70
+ "sec-fetch-mode": "cors",
71
+ "sec-fetch-site": "same-origin"
72
+ },
73
+ "referrer": "https://localhost:44331/WebForm9",
74
+ "referrerPolicy": "strict-origin-when-cross-origin",
75
+ "body": "{\"answer\":42}",
76
+ "method": "POST",
77
+ "mode": "cors",
78
+ "credentials": "omit"
79
+ })
80
+ .then(response => response.json())
81
+ .then(data => console.log(data))
82
+ }
83
+
84
+ window.onload = function () { getData(); getData3(); }
85
+ </script>
86
+ </head>
87
+ <body>
88
+ </body>
89
+ </html>
90
+ ```
91
+
92
+ 上記のコードを実行して Fiddler で要求・応答をキャプチャすると以下のようになっています。
93
+
94
+ **getData()**
95
+
96
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-08-28/1d0aa52f-1e8b-45a6-8eed-a949fa49f4b5.jpeg)
97
+
98
+ **getData3()**
99
+
100
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-08-28/ceaac1d6-d3de-4e4b-ba3b-f12057fbbaaa.jpeg)
101
+
102
+ 要求ヘッダの中の各項目の順番が少し違うだけで同じ内容になっています。もちろん期待通りの結果も得られます。
103
+
104
+ このサンプルでは返ってくる JSON 文字列は以下の通りですが、
105
+
106
+ ```
107
+ [
108
+ {
109
+ "id": 1,
110
+ "name": "aaa"
111
+ },
112
+ {
113
+ "id": 2,
114
+ "name": "bbb"
115
+ },
116
+ {
117
+ "id": 3,
118
+ "name": "ccc"
119
+ }
120
+ ]
121
+ ```
122
+
123
+ 結果は期待通りになります。
124
+
125
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-08-28/7dd9dd00-5367-431a-86ba-b5360bab47ef.jpeg)
126
+
127
+ 質問者さんが Copy as fetch で使ったコピー元がちゃんと POST 要求になっていて期待した応答が返ってきているなら、「変数に分解」するときに何か間違えているということはないですか?