Laravel ajax post 返回 500 内部服务器错误


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"作为主键。如果不使用它,则应设置应用''教师模型:

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() }}" />

这可能会奏效。