#jquery #ajax #laravel #laravel-5.8
#jquery #ajax #laravel #laravel-5.8
Вопрос:
В html есть кнопка, поэтому, когда вы нажимаете на нее, она переходит к .post
запросу jQuery, который отправляется контроллеру, который должен обработать запрос, а затем возвращает success json обратно, но я получаю сообщение об ошибке (обратите внимание, что ошибка связана с console.log (данные)):
jquery.min.js: 2 СООБЩЕНИЯ http://127.0.0.1:8000/comment/like 500 (внутренняя ошибка сервера)
в консоли. Когда я посмотрел дальше, приложение Laravel возвращает эту ошибку:
Метод GET не поддерживается для этого маршрута. Поддерживаемые методы: POST, PUT, DELETE.
с этим текстом ответа в формате json:
#json: null
#convertedFiles: null
#userResolver: Closure($guard = null) {#197 …6}
#routeResolver: null
attributes: ParameterBag {#45}
request: ParameterBag {#51}
query: ParameterBag {#51}
server: ServerBag {#47}
files: FileBag {#48}
cookies: ParameterBag {#46}
headers: HeaderBag {#49}
#content: null
#languages: null
#charsets: null
#encodings: null
#acceptableContentTypes: array:6 [▶]
#pathInfo: "/comment/like"
#requestUri: "/comment/like"
#baseUrl: ""
#basePath: null
#method: "GET"
#format: null
#session: null
#locale: null
#defaultLocale: "en"
-isHostValid: true
-isForwardedValid: true
basePath: ""
format: "html"
Итак, я понимаю, что это должен быть POST-маршрут, но маршрут в web.php контроллер — это
Route::post('/comment/like','LikeController@likeIt')->name('likeIt');
И когда я провел некоторое исследование ошибки сервера 500, я получил большинство ответов, в которых вам нужно добавить, csrfToken
но у меня есть csrfToken
в запросе jQuery ajax, поэтому я не понимаю, почему в нем говорится, что это не запрос post, а запрос get?
Контроллер
public function likeIt()
{
$commentId = Input::get('commentId');
$comment = Comment::find($commentId);
$comment->likeIt();
return response()->json(['status' => 'succes']);
}
HTML
<button class="btn btn-sm" id="{{$comment->id}}" onclick="likeIt('{{$comment->id}}', this)"><i class="material-icons">done</i></button>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
function likeIt(commentId, elem) {
const csrfToken='{{csrf_token()}}';
$.post('{{route('likeIt')}}', {commentId:
commentId,_token:csrfToken}, function (data) {
console.log(data);
});
}
</script>
Комментарии:
1. Добавьте DD или Echo перед $commentId = Input::get(‘commentId’);