Почему laravel не работает должным образом с ajax?

#javascript #php #ajax #laravel #laravel-8

Вопрос:

Я пытаюсь создавать приложения для социальных сетей с помощью laravel, и во время создания системы like я использовал ajax в своем файле js. У меня так много интересных ошибок, поэтому я хочу поделиться ими всеми с вами. Я действительно чувствую себя беспомощным из-за этого, и я искал весь этот день. Спасибо за всю помощь.

  1. Во-первых, я пытаюсь получить данные, из которых состояние postID и like, но оно выглядит неопределенным, когда я получил предупреждение о функции успеха ajax.
  2. Во-вторых, маршрутизатор не может публиковать сообщения в целом, и ajax действует по-другому во время тестирования. Вот так я переместил свой код с mainpage.js чтобы main.blade.php все еще не работает должным образом.
  3. В-третьих, когда я закрыл консоль во время теста и нажал кнопку «Нравится», страница обновилась сама по себе.

это как часть моей 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() не работает.