Laravel使用AJAX将id传递给控制器

时间:2017-02-20 17:42:13

标签: ajax laravel

路线

Route::post('approve', 'PostsController@approve');

的javascript

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

$('.btn-approve-post').on('click', function(){
    var $btn = $(this);
    var post_id = $(this).closest('.post').data('post-id'); // it's a number like 6 or 7 or so on.

    $btn.prop('disabled', true);
    $.ajax({
        type: 'post',
        url: 'approve',
        data: {'id' : post_id},
        dataType: 'json',                   
        success: function(response){ 
            $btn.prop('disabled', false); 
            console.log(111111);
        },
        error: function(jqXHR, textStatus, errorThrown) { 
            console.log(JSON.stringify(jqXHR));
            console.log("AJAX error: " + textStatus + ' : ' + errorThrown);
        }
    });
});
});
控制器中的

方法

class PostsController extends Controller {

public function approve($id)
{
    DB::table('posts')
        ->where('id', $id)
        ->update(['is_approved' => 1]);
}
}

但是当我尝试以这种方式传递id时,它并不起作用。如何使它工作?在这种情况下,什么类型的响应应该回馈我的方法?

3 个答案:

答案 0 :(得分:1)

Laravel中控制器函数中的参数是url中的参数,在路由中定义。要获取发布数据,您需要使用$request变量。

您的代码应该是这样的:

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PostsController extends Controller {

    public function approve(Request $request)
    {
        DB::table('posts')
            ->where('id', $request->id)
            ->update(['is_approved' => 1]);
    }

}

有关请求变量的更多信息,请参阅http://www.pydev.org/developers.html

答案 1 :(得分:1)

您没有在路线中使用id作为外卡参数。请尝试以下代码:

use Illuminate\Http\Request;

class PostsController extends Controller {

   public function approve(Request $request)
   {
       $id = $request->get('id');
       DB::table('posts')
        ->where('id', $id)
        ->update(['is_approved' => 1]);
   }
}

答案 2 :(得分:1)

有很多方法可以在控制器函数中获取post参数:

方法1;

在路线中将id用作外卡参数

Route::post('approve/{id}', 'PostsController@approve');

在你的ajax功能中你可以得到它:

    $.ajax({
     type: 'post',
     url: 'approve/'+post_id,
     dataType: 'json',                   
     success: function(response){ 
         $btn.prop('disabled', false); 
         console.log(111111);
     },
     error: function(jqXHR, textStatus, errorThrown) { 
          console.log(JSON.stringify(jqXHR));
          console.log("AJAX error: " + textStatus + ' : ' + errorThrown);
      }
   });

在您的控制器功能中:

 public function approve($id)
 {
   DB::table('posts')
    ->where('id', $id)
    ->update(['is_approved' => 1]);
 }

方法2使用请求方法:

在路线:

 Route::post('approve', 'PostsController@approve');

在Ajax Call中:

  $.ajax({
    type: 'post',
    url: 'approve',
    data: {'id' : post_id},
    dataType: 'json',                   
    success: function(response){ 
        $btn.prop('disabled', false); 
        console.log(111111);
    },
    error: function(jqXHR, textStatus, errorThrown) { 
        console.log(JSON.stringify(jqXHR));
        console.log("AJAX error: " + textStatus + ' : ' + errorThrown);
    }
  });

在控制器中:

namespace App\Http\Controllers;
use Illuminate\Http\Request;

class PostsController extends Controller {

   public function approve(Request $request)
   {
      DB::table('posts')
        ->where('id', $request->id)
        ->update(['is_approved' => 1]);
   }
 }