2017-02-20 7 views
0

RouteLaravel передать идентификатор контроллер с помощью AJAX

Route::post('approve', '[email protected]'); 

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]); 
} 
} 

, но когда я пытаюсь ПАРОЛЬ этого пути, он не Работа. Как заставить его работать? И какой ответ должен вернуть мой метод в этом случае?

ответ

2

Аргументы в функции контроллера в 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]); 
    } 

} 

Более подробную информацию о переменных запроса можно найти в the documentation.

+0

Я пробовал это, но я получил сообщение об ошибке 'класса App \ Http \ Контроллеры \ Запрос не существует' – Heidel

+0

Вы должны включить следующее право под def namesment пространства имен: 'use Illuminate \ Http \ Request;'. Я также обновил свой ответ. – Jerodev

+0

Спасибо, теперь это работает! – Heidel

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]); 
    } 
} 
+0

Я пробовал это, но я получил ошибку «Приложение класса \ Http \ Controllers \ Request не существует» – Heidel

+0

добавить 'use Illuminate \ Http \ Request;' перед вашим классом. Я отредактировал ответ. – mrabbani

1

Есть много способов, чтобы получить параметры поста в функции контроллера, как:

Метод 1;

Используйте идентификатор как дикое параметра карты в вашем маршруте, как

Route::post('approve/{id}', '[email protected]'); 

В функции 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', '[email protected]'); 

В Ajax вызова:

$.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]); 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^