我想在从文本框的下拉列表中选择一个值后通过 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"作为主键。如果不使用它,则应设置应用''教师模型:
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() }}" />
这可能会奏效。