簡體   English   中英

Laravel ajax帖子返回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”作為主鍵。 如果你沒有使用它,你應該在你的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM