#javascript #php #ajax #laravel #laravel-8
Вопрос:
Я пытаюсь создавать приложения для социальных сетей с помощью laravel, и во время создания системы like я использовал ajax в своем файле js. У меня так много интересных ошибок, поэтому я хочу поделиться ими всеми с вами. Я действительно чувствую себя беспомощным из-за этого, и я искал весь этот день. Спасибо за всю помощь.
- Во-первых, я пытаюсь получить данные, из которых состояние postID и like, но оно выглядит неопределенным, когда я получил предупреждение о функции успеха ajax.
- Во-вторых, маршрутизатор не может публиковать сообщения в целом, и ajax действует по-другому во время тестирования. Вот так я переместил свой код с mainpage.js чтобы main.blade.php все еще не работает должным образом.
- В-третьих, когда я закрыл консоль во время теста и нажал кнопку «Нравится», страница обновилась сама по себе.
это как часть моей main.blade.php
<form id="like" >
@csrf
<a value="{{$posts->Id}}" type="submit" class="card-link"><i class="fa fa-gittip" ></i> Like</a>
<button id="likepost" value="{{$posts->Id}}" type="submit"></button>
</form>
<a id="showcomments" class="card-link"><i class="fa fa-comment"></i> Comments</a>
</div>
это моя функция от postcontroller.php
function likeposts(Request $request){
dd($request);
}
это моя часть веб-маршрутизатора:
Route::post('/post', [PostController::class, 'likeposts'])->name('post');
Я следовал учебнику (но это не laravel-8), так что это моя часть ajax из main.blade.php :
$(document).ready(function() {
$("#like").submit(function(event){
// Do global setting.
event.preventDefault();
console.log(event);
var Id=document.getElementById('likepost').value;
alert(Id);
var like =like();
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
method:'POST',
url:"/post",
data:{ like:like,postId:Id},
});$.ajax( {
success:function(data) {
alert("ok");
}
});
});
})
Еще раз спасибо всем, кто помогает!
Комментарии:
1.
<a value="{{$posts->Id}}" type="submit"...
??? Смешивание<a>
и<input>
атрибуты?2. Да, я стараюсь придать ему форму. На самом деле меня волнует только кнопка с идентификатором «лайкпост».
Ответ №1:
Вы можете изменить html, как показано ниже
<a href="#" data-postid="{{$posts->Id}}" class="card-link likeButton" i><i class="fa fa-gittip"></i> Like</a>
<a id="showcomments" class="card-link"><i class="fa fa-comment"></i> Comments</a>
и в аяксе
<script>
$(document).ready(function () {
$('.likeButton').on('click',function (e) {
e.preventDefault();
var csrf = $('meta[name="csrf-token"]').attr('content');
var postId=$(this).attr('data-postid')
$.ajax({
url: "{{route('post')}}",
method: 'POST',
data: {_token: csrf, postId: postId},
success: function () {
}
});
})
})
</script>
и не забудьте добавить мета-тег
<meta name="csrf-token" content="{{ csrf_token() }}" />
Комментарии:
1. Я вставил в свои файлы, и все равно postcontroller не может запустить функцию dd (). Плюс к одному из них моя функция успешного запуска поста и предупреждение » ок » для меня, но другие просто выбрасывают мне верхнюю часть страницы. (Я использую blade с foreach для получения из базы данных)
2. dd($request->все()); а также проверьте, что вы получаете
3. @Doctorstarter .опубликуйте полный код лезвия. согласно моему пониманию, это должно сработать
4. @Doctorstarter.я обновил код .я ошибся в коде. снова скопируйте как html, так и js
5. Это работает для получения подобного действия, но все равно функция dd() не работает.