路线
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时,它并不起作用。如何使它工作?在这种情况下,什么类型的响应应该回馈我的方法?
答案 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]);
}
}