回答編集履歴

1

edit

2021/02/14 09:26

投稿

m.ts10806
m.ts10806

スコア80852

test CHANGED
@@ -5,3 +5,65 @@
5
5
  できないことはないですが、画面出力とAjaxで呼び出される処理とリクエストを明示的に分ける必要があります。
6
6
 
7
7
  なぜならAjaxで呼び出された処理の「出力すべて」が返却値になるからです。
8
+
9
+
10
+
11
+ 提示のコードだとfooに「test」と送信された場合、返却値は下記のようになります。
12
+
13
+ ```text
14
+
15
+ test
16
+
17
+
18
+
19
+ <script type="text/javascript">
20
+
21
+
22
+
23
+ $(document).ready(function(){
24
+
25
+
26
+
27
+ var _returnValues;
28
+
29
+ function postSend() {
30
+
31
+ var fd = new FormData();
32
+
33
+ fd.append('foo',"OK");
34
+
35
+ var xhr = new XMLHttpRequest();
36
+
37
+ xhr.open('POST');
38
+
39
+ xhr.send(fd);
40
+
41
+ xhr.onreadystatechange = function(){
42
+
43
+ if ((xhr.readyState == 4) && (xhr.status == 200)) {
44
+
45
+ _returnValues = JSON.parse(xhr.responseText);
46
+
47
+ }
48
+
49
+ };
50
+
51
+ }
52
+
53
+
54
+
55
+ }
56
+
57
+
58
+
59
+ </script>
60
+
61
+ ```
62
+
63
+
64
+
65
+ もちろんこれ以外にも「出力」があればそれも全てそのままresponseTextに含まれます。
66
+
67
+ これでは当然、JSON.parseも成功しませんよね。
68
+
69
+ 構成から考え直す必要があります。