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

Posted

技术标签:

【中文标题】Laravel ajax 帖子返回 500 内部服务器错误【英文标题】:Laravel ajax post returns 500 Internal Server Error 【发布时间】:2016-08-20 02:27:22 【问题描述】:

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

【问题讨论】:

检查网络响应,看看错误在说什么? 这是发布控制器文件的一种方式吗? 【参考方案1】:

在 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();

【讨论】:

抱歉错字.. 仍然得到同样的错误! 我已经添加了查询(),但没有任何改变,仍然得到同样的错误。【参考方案2】:

你不应该这样做:

$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); 

【讨论】:

如果你得到 500 并且你在开发环境中,你可以检查 ajax 的响应(来自服务器),例如在 Chrome 中按 F12 并重新运行页面。然后进入 chrome 开发工具上的网络选项卡,找到文件的请求(它是红色的)。单击它并检查响应消息。 谢谢兄弟,您的解决方案可能没有准确地给出我的问题答案,但我有机会知道如何检查响应并找到错误。我解决了这个问题。【参考方案3】:

试试这个,您的原始函数中有几个看起来像是潜在问题的位。否则,您需要发布错误的详细信息。

public function get_teach(Request $request)

    $tech_id = $request -> tech_id;
    $teachers= \App\Teacher::where('teacher_id','=',$tech_id)->get();
    return response() -> json($teachers); 

【讨论】:

【参考方案4】:

您可以随时查看 laravel.log (storage/logs/laravel.log)。

默认情况下,laravel 使用 'id' 作为主键。 如果你不使用它,你应该在你的 App\Teacher 模型上设置:

class Teacher extends Eloquent protected $primaryKey = 'teacher_id';

所以你可以在你的控制器中使用:

$teachers= \App\Teacher::find($tech_id);

【讨论】:

【参考方案5】:

我最近一直在研究这个问题。您已将标头“X-CSRF-TOKEN”添加到您的 ajax 请求中,如您的代码所示:

$.ajaxSetup(
    headers: 
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    
);

但如果您忘记将以下代码添加到页面标题,它的值可能为空。尝试将其添加到您的 head 标签中:

<meta name="csrf-token" content=" csrf_token() " />

这可能会奏效。

【讨论】:

以上是关于Laravel ajax 帖子返回 500 内部服务器错误的主要内容,如果未能解决你的问题,请参考以下文章

laravel 中的 Ajax 发布返回错误 500(内部服务器错误)

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

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

在 laravel 5.2 中使用 jquery 和 ajax 出现 500 内部服务器错误

ajax post 返回 laravel 错误 500(内部服务器错误)

Laravel 4 ajax 发布