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

时间:2016-04-26 10:13:21

标签: php jquery ajax laravel laravel-5.2

我想从文本框的下拉列表中选择一个值后,通过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',
]);

5 个答案:

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

这可能会有用。