質問編集履歴

3 訂正

norisukeoji

norisukeoji score 14

2017/06/08 08:16  投稿

LaravelでPHPのバリデーションエラーをAjaxで拾う方法
プログラミング初心者です。
Laravel5.2.+Ajaxで登録フォームを作っています。
バリデーション自体はサーバーサイドで行いたいためPHP上で行うよう、AjaxでPHPにリクエストを送り、Laravelのコントローラーを通してRequestバリデーションを行っています。そちらでエラーメッセージなども設定しています。
処理自体はうまくいくのですが、バリデーションエラー時のエラーメッセージの取り出し方がわかりません。
エラー別にメッセージを取り出したいため、
```jQuery
error: function(XMLHttpRequest, textStatus, errorThrown){
           alert(XMLHttpRequest.responseText)
}
```
という形で直接Requestで設定したメッセージを表示しようとしたのですが、返ってくるメッセージはひどく文字化けしています。
エラー別にメッセージを取り出したいため、直接Requestで設定したメッセージを表示しようとしたのですが、返ってくるメッセージはひどく文字化けしています。
Chromeのデベロッパーツールなどで確認したところ、Requestコントローラーで設定したメッセージはPreviewタブでは正常に表示され、Responseタブでは文字化けした状態でした。
正常にエラーメッセージを表示するにはどうすればよいでしょうか。
---
これをControllerから呼び出してバリデーションしています。
```php
Request.php
~~~~~
   public function rules()
   {
       return [
         'hoge' => 'sometimes|required',
         'hoge2' => 'sometimes|required',
       ];
   }
   public function messages()
  {
      return [           
          'hoge.required' => '必須です。',
          'hoge2.required' => '必須です。',
      ];
  }
```
```javascript
$(document).ready(function()
   {
  $.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
   });
  $.ajax({
       type: "POST",
       url: "complete",
       dataType: 'script',
       scriptCharset: 'utf-8',
       data: data,
          success: function(data, dataType)
               {
                   alert("登録が完了しました");
               },
               
               error: function(XMLHttpRequest, textStatus, errorThrown)
               {
                 alert('エラー' + XMLHttpRequest.responseText)
               }
           });           
           return false;
       });
   });
```
  • PHP

    38979 questions

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

  • Ajax

    2262 questions

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

  • Laravel

    5383 questions

    LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

2 コード

norisukeoji

norisukeoji score 14

2017/06/08 08:14  投稿

LaravelでPHPのバリデーションエラーをAjaxで拾う方法
プログラミング初心者です。
Laravel+Ajaxで登録フォームを作っています。
Laravel5.2.+Ajaxで登録フォームを作っています。
バリデーション自体はサーバーサイドで行いたいためPHP上で行うよう、AjaxでPHPにリクエストを送り、Laravelのコントローラーを通してRequestバリデーションを行っています。そちらでエラーメッセージなども設定しています。
処理自体はうまくいくのですが、バリデーションエラー時のエラーメッセージの取り出し方がわかりません。
エラー別にメッセージを取り出したいため、
```jQuery
error: function(XMLHttpRequest, textStatus, errorThrown){
           alert(XMLHttpRequest.responseText)
}
```
という形で直接Requestで設定したメッセージを表示しようとしたのですが、返ってくるメッセージはひどく文字化けしています。
Chromeのデベロッパーツールなどで確認したところ、Requestコントローラーで設定したメッセージはPreviewタブでは正常に表示され、Responseタブでは文字化けした状態でした。
正常にエラーメッセージを表示するにはどうすればよいでしょうか。
正常にエラーメッセージを表示するにはどうすればよいでしょうか。
---
これをControllerから呼び出してバリデーションしています。
```php
Request.php
~~~~~
   public function rules()
   {
       return [
         'hoge' => 'sometimes|required',
         'hoge2' => 'sometimes|required',
       ];
   }
   public function messages()
  {
      return [           
          'hoge.required' => '必須です。',
          'hoge2.required' => '必須です。',
      ];
  }
```
```javascript
$(document).ready(function()
   {
  $.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
   });
  $.ajax({
       type: "POST",
       url: "complete",
       dataType: 'script',
       scriptCharset: 'utf-8',
       data: data,
          success: function(data, dataType)
               {
                   alert("登録が完了しました");
               },
               
               error: function(XMLHttpRequest, textStatus, errorThrown)
               {
                 alert('エラー' + XMLHttpRequest.responseText)
               }
           });           
           return false;
       });
   });
```
  • PHP

    38979 questions

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

  • Ajax

    2262 questions

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

  • Laravel

    5383 questions

    LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

1 初心者タグ付け

norisukeoji

norisukeoji score 14

2017/06/08 08:00  投稿

LaravelでPHPのバリデーションエラーをAjaxで拾う方法
プログラミング初心者です。  
 
Laravel+Ajaxで登録フォームを作っています。
バリデーション自体はサーバーサイドで行いたいためPHP上で行うよう、AjaxでPHPにリクエストを送り、Laravelのコントローラーを通してRequestバリデーションを行っています。そちらでエラーメッセージなども設定しています。
処理自体はうまくいくのですが、バリデーションエラー時のエラーメッセージの取り出し方がわかりません。
エラー別にメッセージを取り出したいため、
```jQuery
error: function(XMLHttpRequest, textStatus, errorThrown){
           alert(XMLHttpRequest.responseText)
}
```
という形で直接Requestで設定したメッセージを表示しようとしたのですが、返ってくるメッセージはひどく文字化けしています。
Chromeのデベロッパーツールなどで確認したところ、Requestコントローラーで設定したメッセージはPreviewタブでは正常に表示され、Responseタブでは文字化けした状態でした。
正常にエラーメッセージを表示するにはどうすればよいでしょうか。
  • PHP

    38979 questions

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

  • Ajax

    2262 questions

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

  • Laravel

    5383 questions

    LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る