質問編集履歴

7

修正

2022/02/10 10:58

投稿

tuna-kan
tuna-kan

スコア23

test CHANGED
File without changes
test CHANGED
@@ -61,3 +61,21 @@
61
61
  「header関数の前に出力があってはいけないのに上記のコードではPOSTされて初めてheader関数を呼び出すのに、レスポンスボディはheader関数よりも先に出力しているけどいいのだろうか?」
62
62
 
63
63
  ご回答よろしくお願いします。
64
+
65
+
66
+ 追記
67
+ 解決しました。
68
+ 勘違いの経緯や理由などをまとめておきます。
69
+
70
+
71
+ 勘違い1
72
+ 実際に作っているアプリでは、ajaxのurlをhoge.phpのようにしていた。
73
+ (質問のレスポンスボディとはhoge.phpのhtml部分のことでした)
74
+
75
+ 勘違い2
76
+ ajaxでheader関数を使いレスポンスヘッダーを設定すると、hoge.phpの最初のレスポンスに追記する形でレスポンスされると思っていた。
77
+ (実際には全くの別なので最初のhoge.phpのレスポンスボディは全く関係ない)
78
+
79
+ 以上の2つが原因で最初にhoge.phpのhtmlの部分のレスポンスボディを表示しているのに、なぜajaxでhoge.phpにレスポンスヘッダーを設定できるのかが分かりませんでした。
80
+
81
+ ajaxとリクエスト・レスポンスの理解不足でした。

6

修正

2022/02/10 02:33

投稿

tuna-kan
tuna-kan

スコア23

test CHANGED
File without changes
test CHANGED
@@ -25,7 +25,7 @@
25
25
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
26
26
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
27
27
  <title>hoge</title>
28
- <script src="https://code.jquery.com/ui/1.13.0/jquery-ui.min.js"></script>
28
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
29
29
  </head>
30
30
 
31
31
  <body>

5

修正

2022/02/10 02:32

投稿

tuna-kan
tuna-kan

スコア23

test CHANGED
File without changes
test CHANGED
@@ -25,6 +25,7 @@
25
25
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
26
26
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
27
27
  <title>hoge</title>
28
+ <script src="https://code.jquery.com/ui/1.13.0/jquery-ui.min.js"></script>
28
29
  </head>
29
30
 
30
31
  <body>

4

修正

2022/02/10 02:26

投稿

tuna-kan
tuna-kan

スコア23

test CHANGED
File without changes
test CHANGED
@@ -1,7 +1,7 @@
1
1
  僕はPHPを勉強しながら、ajaxで非同期通信をしながら処理をするアプリを作っています。
2
2
  ネットで見つけて参考にしながら使っているコードこういうものですが、
3
3
 
4
- ```PHP
4
+ ```ajax.php
5
5
  if (isset($_POST['hoge'])) {
6
6
  $hoge = $_POST['hoge']
7
7
  $hoge -> new PDO('hogehoge');
@@ -13,6 +13,45 @@
13
13
  }
14
14
  ```
15
15
 
16
+ ```hoge.php
17
+ <?php
18
+ require('ajax.php');
19
+ ?>
20
+ <!DOCTYPE html>
21
+ <html lang="ja">
22
+
23
+ <head>
24
+ <meta charset="UTF-8">
25
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
26
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
27
+ <title>hoge</title>
28
+ </head>
29
+
30
+ <body>
31
+ <h1>HOGEHOGE</h1>
32
+ <input type="text" id="hoge">
33
+ <button id="hogetn"></button>
34
+ <script>
35
+ $('#hogetn').click(function() {
36
+ let hoge = $('#hoge').val();
37
+ $.ajax({
38
+ type: 'POST',
39
+ url: 'ajax.php',
40
+ data: {
41
+ 'hoge': hoge
42
+ },
43
+ dataType: 'json',
44
+ }).done(function(data) {
45
+ console.log(hoge);
46
+ }).fail(function(XMLHttpRequest, status, e) {
47
+ });
48
+ });
49
+ </script>
50
+ </body>
51
+
52
+ </html>
53
+ ```
54
+
16
55
  今までは何も疑問を持たなかったのですがPHPの勉強をしていると、
17
56
  **PHPのheader関数は、レスポンスヘッダを設定するのでheader関数の前に出力があってはいけない。**
18
57
  と本やネットにも書いていおり、ふと疑問を持ちました。

3

質問の修正

2022/02/10 01:46

投稿

tuna-kan
tuna-kan

スコア23

test CHANGED
File without changes
test CHANGED
@@ -18,10 +18,6 @@
18
18
  と本やネットにも書いていおり、ふと疑問を持ちました。
19
19
 
20
20
 
21
- 「header関数の前に出力があってはいけないのにajaxではheader関数を呼び出すPHPで普通に出力しているしなんらなレスポンスボディすらも出力しているけどいいのだろうか?」
21
+ 「header関数の前に出力があってはいけないのに上記のコードではPOSTされて初めてheader関数を呼び出すに、レスポンスボディはheader関数より先に出力しているけどいいのだろうか?」
22
-
23
-
24
- 僕の環境ではPHPの出力バッファリングがOnになっているためか動くには動くのですが、header関数の特質を考えるとこのコードは間違っているのでしょうか?
25
- それとも、僕が何かしらの勘違いをしているのでしょうか?
26
22
 
27
23
  ご回答よろしくお願いします。

2

修正

2022/02/10 01:30

投稿

tuna-kan
tuna-kan

スコア23

test CHANGED
File without changes
test CHANGED
@@ -21,7 +21,7 @@
21
21
  「header関数の前に出力があってはいけないのにajaxではheader関数を呼び出す前にPHPで普通に出力しているし、なんらなレスポンスボディすらも出力しているけどいいのだろうか?」
22
22
 
23
23
 
24
- 僕の環境ではPHPの出力バッファリングがOnになってい動くには動くのですが、header関数の特質を考えるとこのコードは間違っているのでしょうか?
24
+ 僕の環境ではPHPの出力バッファリングがOnになっているためか動くには動くのですが、header関数の特質を考えるとこのコードは間違っているのでしょうか?
25
25
  それとも、僕が何かしらの勘違いをしているのでしょうか?
26
26
 
27
27
  ご回答よろしくお願いします。

1

誤字修正

2022/02/10 01:29

投稿

tuna-kan
tuna-kan

スコア23

test CHANGED
File without changes
test CHANGED
@@ -14,7 +14,7 @@
14
14
  ```
15
15
 
16
16
  今までは何も疑問を持たなかったのですがPHPの勉強をしていると、
17
- **PHPのheadr関数は、レスポンスヘッダを設定するのでheader関数の前に出力があってはいけない。**
17
+ **PHPのheader関数は、レスポンスヘッダを設定するのでheader関数の前に出力があってはいけない。**
18
18
  と本やネットにも書いていおり、ふと疑問を持ちました。
19
19
 
20
20