実現したいこと
Ajaxで非同期通信の学習中です。
PHPのファイルを紐づけています。
PHPのファイルでエラーが出たときに(構文ミス等)下記のようにでコンソールに表示されるようにしたい。
エラーの内容:(エラー内容が表示)
発生している問題・分からないこと
コンソールにエラーメッセージが出て、こちらの意図した通りの表示が表れません。
エラーメッセージ
error
1<br /> 2<b>Parse error</b>: syntax error, unexpected single-quoted string "これはbodyの中身だよ" in <b>C:\xampp\htdocs\php_lesson\ajax\body.php</b> on line <b>3</b><br />
該当のソースコード
HTML jQuery Ajax PHP
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <title>Ajax</title> 7 <script src="https://code.jquery.com/jquery-3.7.1.min.js" integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script> 8<script> 9 $(function(){ 10 $.ajax({ 11 url: 'http://localhost/php_lesson/ajax/body.php', 12 type: 'GET', 13 dataType: 'html', 14 success: function(data){ 15 console.log(data); 16 }, 17 error: function(xhr, status, error){ 18 console.log('エラーの内容:'+ error); 19 }, 20 }); 21 }); 22</script> 23</head> 24<body> 25 最初のページ 26 <p id="loaded_area">読込中</p> 27</body> 28</html>
PHP
1PHPのコード 2<?php 3sleep(3); 4echot 'これはbodyの中身だよ'; 5 6※echot ⇒ わざと誤った記述をしています。
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
生成AIに下記の質問をしました。
下記HTMLとPHPのコードを書きました。
PHPのコードは意図的にechoをechoeと誤った記述を行い、エラーメッセージが正しく表示するか確認をします。
しかしながら、こちらの意図したエラーメッセージが表示されません。
原因を解明してください。
※コードとエラーメッセージは先に記したとおりです。
AIの回答
記載されたエラーメッセージは、PHPの構文エラー、具体的には「Syntax error」と表示されています。これはPHPコード内に記述ミスがあり、PHPパーサがコードを解釈できないことを意味しています。ここでは、echo
という関数をechoe
と誤って記述することで意図的に構文エラーを引き起こしています。
意図したエラーメッージが表示されない原因は、おそらくブラウザ上でのAjaxリクエストの扱いにあります。Ajaxのerror
コールバックは、HTTPレベルでのエラーが発生した場合(たとえば、404 Not Foundや500 Internal Server Errorなど)に呼び出されますが、PHPのパースエラーのような場合、サーバーは通常200 OKのステータスコードをブラウザに送信し、エラーメッセージをレスポンスの本文として含めます。
したがって、JavaScriptのsuccess
コールバック関数が実行され、レスポンスの本体(この場合はPHPのエラーメッセージ)がコンソールに出力されます。
PHPの構文エラーを適切に扱うためには、開発中はPHPのエラーレポーティングを有効にし、サーバーのエラーログを確認するか、または、デバッグ目的でini_set('display_errors', 1);
としてエラーをブラウザに表示させることが推奨されます。ただし、本番環境ではセキュリティ上の理由からエラーをブラウザに表示させるべきではありません。
また、これはPHPの実行エラーであって、HTTP通信のエラー(サーバーが見つからない、接続できない、など)ではないため、Ajaxのerror
関数がトリガーされないことも考慮してください。
補足
現在オンラインでPHPを学んでおり、先のコードは授業で記述されたコードをそのまま写しておりますが、授業ではエラーの内容:〇〇と出力されています。
開発の環境の問題なのでしょうか?
回答1件
あなたの回答
tips
プレビュー