[英]Laravel ajax post returns 500 Internal Server Error
我想從文本框中的下拉列表中選擇一個值后,通過AJAX請求加載一些數據。 但是從下拉列表中選擇后,它顯示500 (Internal Server Error)
。 我該如何解決?
這是我的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);
}
這是路線:
Route::post('ajaxteach', [
'uses' => 'CourseController@get_teach',
'as' => 'ajaxteach',
]);
在jquery ajax上打電話給你通過
teach_id: teach_id
而控制器看看tech_id
你也忘了query()
,應該是正確的
$tech_id = $request::input(['teach_id']);
$teachers= \App\Teacher::query()->where('teacher_id','=',$teach_id)->get();
你不應該這樣做:
$request::input(['tech_id']);
你有一個對象,所以你不應該以靜態方式獲得它的靜態方法。 你可以在$request
對象上使用get()
方法:
$request->get('tech_id');
所以整個控制器方法是:
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);
}
試試這個,原始函數中有幾個看起來像潛在的問題。 如果不這樣做,您需要發布錯誤的詳細信息。
public function get_teach(Request $request)
{
$tech_id = $request -> tech_id;
$teachers= \App\Teacher::where('teacher_id','=',$tech_id)->get();
return response() -> json($teachers);
}
你可以隨時檢查laravel.log(storage / logs / laravel.log)。
默認情況下,laravel使用“id”作為主鍵。 如果你沒有使用它,你應該在你的App \\ Teacher模型上設置:
class Teacher extends Eloquent { protected $primaryKey = 'teacher_id'; }
所以你可以在你的控制器中使用:
$teachers= \\App\\Teacher::find($tech_id);
我最近一直在研究這個問題。 您已將標題'X-CSRF-TOKEN'添加到您的ajax請求中,如代碼所示:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
但如果您忘記將以下代碼添加到頁面頭部,則其值可能為空。 嘗試在頭標記中添加:
<meta name="csrf-token" content="{{ csrf_token() }}" />
這可能會有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.