AJAX POST到laravel返回404找不到

时间:2017-06-12 06:24:14

标签: ajax laravel

我正在尝试将POST数据从ajax处理到laravel控制器,但我无法访问它。这是我在AJAX中所做的。

$.ajax({
     type:'POST',
     url:'/complete_ca_fin',
     data: {fin_id: id},
     success:function(data){
      console.log(data);
      $('#modal_complete').modal('hide');
      $('html, body').animate({
      scrollTop: 0  }, "slow");

      $('#message_form').empty().css('display','block').removeClass('alert-danger').addClass('alert-success').text('Finished Good CA has been successfully completed.');
      $('#message_form').fadeOut(4000);

      setTimeout(function(){
          window.location = '/quality_control';
      }, 3000);
      refresh_check = true;
      window.onbeforeunload = null;

     },
     error: function (data) {
      console.log('Error: ' + data);
     } // end of error

  }); // ajax
应在控制器中访问

id。这是我的路线

Route::post('/complete_ca_fin', 'DatasheetController@complete_ca_fin');

这是我的控制器

public function complete_ca_fin(Request $request) {
      $id = $request->id;
      $complete_ca = FinishedCA::findOrFail($id);

      if ($complete_ca){
        $complete_ca->status = '5';
        $complete_ca->save();
        return 'success';
      }

      //return 'success';

    }

当我尝试返回$id进行测试时我注意到它是空的(我不知道它是否与它有关)但我知道ajax中的var id有价值,因为我在控制台测试了它。

以下是控制台日志的示例。 37是id的值,因此控制器中应该有一个值 enter image description here

2 个答案:

答案 0 :(得分:0)

使用Input::get('id');代替请求,所以你的方法会喜欢这个

public function complete_ca_fin(Request $request) {
      $id = Input::get('id');
      $complete_ca = FinishedCA::findOrFail($id);

      if ($complete_ca){
        $complete_ca->status = '5';
        $complete_ca->save();
        return 'success';
      }

      //return 'success';

    }

答案 1 :(得分:0)

您正在使用findOrfail,这意味着如果没有电子邮件,您将投放404,您想要验证它是否存在,而不是404不是

public function complete_ca_fin(Request $request) {
  $id = $request->id;
  $complete_ca = FinishedCA::find($id);

  if ($complete_ca->exists()){
    $complete_ca->status = '5';
    $complete_ca->save();
    return 'success';
  }

  //return 'success';

}