2016-04-26 13 views
1

テキストボックスのドロップダウンから値を選択した後、AJAXリクエストを使ってデータをロードしたい。ただし、ドロップダウンから選択すると、500 (Internal Server Error)が表示されます。どうすれば解決できますか?ここでLaravel ajax postは500内部サーバエラーを返す

は私のAJAXコードである:ここで

$('#teacher').on('change',function(e){ 
    var tech_id = $('#teacher option:selected').attr('value'); 
    $.ajaxSetup({ 
     headers: { 
      'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
     } 
    }); 

    $.ajax({ 
     type: "POST", 
     url: "{{url('ajaxteach')}}", 
     data: { 
      tech_id: tech_id 
     }, 
     success: function(data) { 
      var json_obj = jQuery.parseJSON(data); 
      $('#credit_taken').val(json_obj.credit_taken); 
      $('#remaining_credit').val(json_obj.remaining_credit); 
     } 
    }); 
}); 

は私のコントローラである。ここ

public function get_teach(Request $request) 
{ 
    $tech_id = $request::input(['tech_id']);  
    $teachers= \App\Teacher::where('teacher_id','=',$tech_id)->get();  
    return Response::json($teachers); 
} 

がルートである:jqueryのAJAX呼び出しで

Route::post('ajaxteach', [ 
    'uses' => '[email protected]_teach', 
    'as' => 'ajaxteach', 
]); 
+0

ネットワークの応答を確認し、エラーの内容を確認します。 – Anderscc

+0

コントローラファイルを投稿する方法ですか? –

答えて

0

あなたは

teach_id: teach_id 
を渡します

とコントローラが正しい、あなたもquery()を忘れてしまったtech_idを見てあなたはそれを行うべきではありません

$tech_id = $request::input(['teach_id']);  
$teachers= \App\Teacher::query()->where('teacher_id','=',$teach_id)->get(); 
+0

Sorry Typo mistake ..まだ同じエラーが発生している! – User57

+0

私はquery()を追加しましたが、何も変更されずに、同じエラーが発生しました。 – User57

0

次のようになります。

$request::input(['tech_id']);

あなたがするために得るべきではありませんので、あなたがオブジェクトを持っています静的な方法でそれをunstaticメソッドです。ビットのカップルは潜在的な問題のように見えたあなたの本来の機能であった、これを試してみてください

public function get_teach(Request $request) 
{ 
    $tech_id = $request->get('tech_id');  
    $teachers= \App\Teacher::where('teacher_id','=',$tech_id)->get();  
    return Response::json($teachers); 
} 
+0

何も変わらず、同じエラーが発生しました! – User57

+3

あなたが500を取得し、あなたがdev環境にある場合たとえば、ChromeのAjax(サーバーからの)の応答を遅らせてF12を押し、ページを再実行できます。次に、chrome開発ツールの[ネットワーク]タブにアクセスし、ファイルのリクエストを見つけます(赤色になります)。それをクリックして、応答メッセージを確認します。 –

+0

おかげで、あなたの解決策は私の質問の答えを正確に与えられないかもしれませんが、私は応答をチェックしてエラーを見つける方法を知る機会があります。 私はこの問題を解決しました。 – User57

0

$request->get('tech_id');

だから、全体のコントローラのメソッドがある:あなたは$requestオブジェクト上get()メソッドを使用することができます。それに失敗すると、エラーの詳細を投稿する必要があります。

public function get_teach(Request $request) 
{ 
    $tech_id = $request -> tech_id; 
    $teachers= \App\Teacher::where('teacher_id','=',$tech_id)->get(); 
    return response() -> json($teachers); 
} 
0

いつでもlaravel.log(storage/logs/laravel.log)を確認することができます。

デフォルトでは、laravelはプライマリキーとして 'id'を使用します。私が取り組んできた

$teachers= \App\Teacher::find($tech_id);

0

class Teacher extends Eloquent { protected $primaryKey = 'teacher_id'; }

だから、あなたのコントローラ内で使用することができます:あなたはそれを使用していない場合 は、あなたが上のApp \教師モデルを設定する必要があります最近この問題。あなたのコードに示すように、あなたは、あなたのAjaxのリクエストにヘッダ「X-CSRF-TOKEN」を追加しました:

$.ajaxSetup({ 
    headers: { 
     'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
    } 
}); 

しかし、あなたがあなたのページの先頭に次のコードを追加するのを忘れた場合、その値が空である可能性があります。これをあなたの頭のタグの内側に追加してみてください:

<meta name="csrf-token" content="{{ csrf_token() }}" /> 

これはうまくいく可能性があります。

関連する問題