【问题标题】:Laravel ajax post returns 500 Internal Server ErrorLaravel ajax 帖子返回 500 内部服务器错误
【发布时间】: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',
]);

【问题讨论】:

  • 检查网络响应,看看错误在说什么?
  • 这是发布控制器文件的一种方式吗?

标签: php jquery ajax laravel laravel-5.2


【解决方案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() }}" />
      

      这可能会奏效。

      【讨论】:

        猜你喜欢
        • 2016-09-16
        • 2016-06-19
        • 2019-11-12
        • 1970-01-01
        • 2023-03-19
        • 2019-06-05
        • 2017-04-12
        • 2020-02-12
        • 2018-04-16
        相关资源
        最近更新 更多