質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

1回答

137閲覧

PHPでエラーが出たときのエラーメッセージがの出力が意図したとおりに出力されない

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2024/05/06 14:17

実現したいこと

Ajaxで非同期通信の学習中です。
PHPのファイルを紐づけています。
PHPのファイルでエラーが出たときに(構文ミス等)下記のようにでコンソールに表示されるようにしたい。

エラーの内容:(エラー内容が表示)

発生している問題・分からないこと

コンソールにエラーメッセージが出て、こちらの意図した通りの表示が表れません。

エラーメッセージ

error

1<br /> 2<b>Parse error</b>: syntax error, unexpected single-quoted string &quot;これはbodyの中身だよ&quot; 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を学んでおり、先のコードは授業で記述されたコードをそのまま写しておりますが、授業ではエラーの内容:〇〇と出力されています。
開発の環境の問題なのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tezcello

2024/05/07 09:02

> コンソールにエラーメッセージが出て、こちらの意図した通りの表示が表れません。 コンソールには出力できていますよね? その出力結果が意図したモノでないのは理解できたけれど、「意図した通りの表示」がどんなものかを明示してもらわないと...
退会済みユーザー

退会済みユーザー

2024/05/07 09:16

error: function(xhr, status, error){ console.log('エラーの内容:'+ error); }, 上記記述を記載していたので意図した表示が理解されるものだと思っておりました。 失礼しましたー。
guest

回答1

0

ベストアンサー

単純にPHPのエラーはHTML上では単なるHTMLのstatus200(完了)ということです。
とくにPHP側でthrowできない致命的なエラーの場合ヘッダーでエラーを付加することもできないので仕方ないでしょう。
APIとしてあきらかに文法エラーを含むものはxhrでエラーを掴むのではなくあらかじめ十分な検証をして、非同期の要求に対して想定外の値を返したいときにhttpエラーヘッダをつけて返すことによりxhrとしてエラーとして認識させる流れになります。

投稿2024/05/07 09:07

yambejp

総合スコア115012

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2024/05/07 09:17

回答ありがとうございます。 ベストアンサーに選ばせていただきました。
yambejp

2024/05/07 10:39

なにも即退会することもないのに 私の回答が不親切だったのでしょうか・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問