我想从文本框的下拉列表中选择一个值后,通过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',
]);
答案 0 :(得分:0)
在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();
答案 1 :(得分:0)
你不应该这样做:
$request::input(['tech_id']);
你有一个对象所以你不应该以静态的方式达到它的静态方法。您可以在get()
对象上使用$request
方法:
$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);
}
答案 2 :(得分:0)
试试这个,原始函数中有几个看起来像潜在的问题。如果不这样做,您需要发布错误的详细信息。
public function get_teach(Request $request)
{
$tech_id = $request -> tech_id;
$teachers= \App\Teacher::where('teacher_id','=',$tech_id)->get();
return response() -> json($teachers);
}
答案 3 :(得分:0)
您可以随时检查laravel.log(storage / logs / laravel.log)。
默认情况下,laravel使用'id'作为主键。 如果您没有使用它,您应该在App \ Teacher模型上设置:
class Teacher extends Eloquent {
protected $primaryKey = 'teacher_id';
}
所以你可以在你的控制器中使用:
$teachers= \App\Teacher::find($tech_id);
答案 4 :(得分:0)
我最近一直在研究这个问题。您已将标题“X-CSRF-TOKEN”添加到您的ajax请求中,如代码所示:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
但如果您忘记将以下代码添加到页面头部,则其值可能为空。尝试在头标记中添加:
<meta name="csrf-token" content="{{ csrf_token() }}" />
这可能会有用。