2016-04-26 1 views
1

Ich möchte einige Daten über eine AJAX-Anfrage nach Auswahl eines Werts aus einem Dropdown in Textbox laden. Nach der Auswahl aus dem Dropdown-Feld wird jedoch 500 (Internal Server Error) angezeigt. Wie löse ich es?Laravel Ajax Post gibt 500 Interner Server Fehler

Hier ist meine AJAX-Code:

$('#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); 
     } 
    }); 
}); 

Hier ist mein Controller

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); 
} 

Hier die Route:

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

Überprüfen Sie die Netzwerkantwort und sehen Sie, was der Fehler sagt? – Anderscc

+0

Ist das eine Möglichkeit, Ihre Controller-Datei zu veröffentlichen? –

Antwort

0

Auf Jquery Ajax-Aufruf

Sie passieren
teach_id: teach_id 

Und Controller schaut tech_id Sie auch query() vergessen, muss die richtige

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

Sorry Tippfehler ..Trotzdem immer noch der gleiche Fehler! – User57

+0

Ich habe die Abfrage() hinzugefügt, aber nichts geändert, immer noch den gleichen Fehler. – User57

0

Sie das nicht tun sollte:

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

Sie haben ein Objekt, so dass Sie nicht bekommen sollte es statische Methode auf statische Weise. Sie können get() Methode auf $request Objekt verwenden:

$request->get('tech_id');

So ist die gesamte Controller-Methode ist:

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

nichts geändert bro.still immer gleichen Fehler! – User57

+3

Wenn du 500 bekommst und du bist in der Dev-Umgebung als Du kannst die Antwort von Ajax (vom Server) checken, zum Beispiel in Chrome, drücke F12 und führe die Seite erneut aus. Dann gehen Sie auf die Netzwerk-Registerkarte auf Chrome-Entwicklungstool und finden Sie die Anfrage, dass Dateien (es ist auf dem roten). Klicken Sie darauf und überprüfen Sie die Antwortnachricht. –

+0

Dank bro, Ihre Lösung möglicherweise nicht genau die Antwort meiner Frage gegeben, aber ich habe die Chance zu wissen, wie Sie die Antwort überprüfen und den Fehler finden. Ich löste das Problem. – User57

0

dieses Versuchen gab es ein paar Bits in Ihrer ursprünglichen Funktion, wie potenzielle Probleme sah . Andernfalls müssten Sie die Details des Fehlers posten.

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

Sie können Ihre laravel.log (storage/logs/laravel.log) immer überprüfen.

Standardmäßig verwendet Laravel 'id' als Primärschlüssel. Falls Sie nicht verwenden, sollten Sie sich auf Sie App \ Lehrer Modell gesetzt:

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

So können Sie in Ihrem Controller verwenden:

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

0

ich gearbeitet habe Dieses Problem in letzter Zeit. Sie haben den Header ‚X-CSRF-token‘ zu Ihrer Ajax-Anforderung hinzugefügt, wie im Code gezeigt:

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

aber sein Wert kann leer sein, wenn Sie den folgenden Code zu Ihrer Seite Kopf hinzuzufügen vergessen. Versuchen Sie, dies in Ihrem Kopf-Tag hinzuzufügen:

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

Dies könnte funktionieren.