Значение комментариев работает только для первого поста - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь оставить комментарий к сообщению, для этого я получил все сообщения.

У меня есть кнопка с именем Комментарий , которая, когда янажмите кнопку Я хочу получить текущий комментарий body, post_id и user_id, чтобы сохранить их в таблице comments.

здесь возникает проблема : когда я нажимаюна Комментарий для первого поста, комментарии body, post_id и user_id загружаются совершенно нормально, и я предупреждал их раньше ajax запрос, они подходят для первого сообщения, но для оставшихся posts, когда я нажимаю на кнопку Комментарий , я получаю id первого сообщения * и ничего для комментария body, даже когда я нажимаю кнопку Комментарий , отличную от первого сообщения, она возвращает id первого сообщения.

Я использую Laravel, вот мой код:

Контроллер

Route::post('comment/{post_id}',[

'uses' => 'CommentController@storeComments',
]);

storeComments Функция

 public function storeComments(Request $request,Comment $body,$post_id){

   if(!$request->ajax()){
    $comment = new Comment;
    $comment->user_id =  Auth::user()->id;
    $comment->post_id = $post_id;
    $comment->body = Input::get('body');

    $comment->save();
     $response = array(
        'status' => 'success',
        'msg' => 'Setting created successfully',
    );
     return Response::json($response);
     return 'yes';
   }else{
    return 'no';
    }
 }

Вот моя форма .Я использовал foreach цикл, чтобы получить все посты и там внутри этого цикла, я использовал textarea для комментария в следующей форме.

@foreach


 <form action="{{ url('comment',$post->p_id)  }}" method="POST"  > 
   @csrf
    <textarea 
    name="body"


     placeholder="Write A Suggestion" 
     data-autosize-input='{ "space": 100 }' 
     rows="50" cols="100"
     name="comment"  
      class="form-control comment body">

     </textarea> 
        <input type="hidden" value="{{csrf_token()}}">


        <!-- user Id of the logged In one -->

            <input type="text" class="user_id" value="{{Auth::user()->id}}" name="user_id">

            <!-- post id  -->

            <input type="text" class="post_id" name="post_id" value="{{$post->p_id}}">



        <button type="button" class="btn btn-sm btn-danger formcomment" value = 'Comment' style="margin:10px;">Comment</button> 
    </form>


@endforeach

Вот Ajax Request

<!--  actuall here control does not comes okay -->
<script type="text/javascript">


    $(document).ready(function(){

     $('.formcomment').on('click', function(e) {
    e.preventDefault();

    // these are id's
    var body = $('.body').val();
    var post_id = parseInt($('.post_id').val());
    var user_id = parseInt($('.user_id').val());

    alert(body);
    alert('this is post'+post_id);
    alert('This is user id'+user_id);


    $.ajax({
        type: "POST",
        url: '/comment',
        data: {body:body, post_id:post_id, user_id:user_id},
        success: function(msg) {
            $("body").append("<div>"+msg+"</div>");
        }
    });
});


});

Примечание:

Я искал эту проблему, было предложено изменить id на class потому что в Jquery id's должно быть уникальным для разных полей.

Поскольку форма находится внутри цикла @foreach и поля различны для каждого поста.

Надеюсь, это имеет какой-то смыслЯ действительно старался изо всех сил, чтобы сделать это простым.

Я новичок в Laravel

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

попробуйте

Route::post('comment/{post_id}',[

'uses' => 'CommentController@storeComments',
]);
storeComments Function

 public function storeComments(Request $request,$post_id){

   if(!$request->ajax()){
    $comment = new Comment;
    $comment->user_id =  Auth::user()->id;
    $comment->post_id = $post_id;
    $comment->body = $request->get('body');

    $comment->save();
     $response = array(
        'status' => 'success',
        'msg' => 'Setting created successfully',
    );
     return Response::json($response);
     return 'yes';
   }else{
    return 'no';
    }
 }
Here is my form. I've used foreach loop to get all the post and there inside that loop I've used textarea for the comment in the following form.

@foreach


 <form  method="POST"  > 
   @csrf
    <textarea 
    name="body" id="body" 


     placeholder="Write A Suggestion" 
     data-autosize-input='{ "space": 100 }' 
     rows="50" cols="100"
     name="comment"  
      class="form-control comment body">

     </textarea> 
        <input type="hidden" value="{{csrf_token()}}">


        <!-- user Id of the logged In one -->

            <input type="text" class="user_id" value="{{Auth::user()->id}}" name="user_id">

            <!-- post id  -->

            <input type="text" class="post_id" name="post_id" value="{{$post->p_id}}">



        <button type="button" class="btn btn-sm btn-danger formcomment" value = 'Comment' style="margin:10px;">Comment</button> 
    </form>


@endforeach
Here is Ajax Request

<!--  actuall here control does not comes okay -->
<script type="text/javascript">


    $(document).ready(function(){

     $('.formcomment').on('click', function(e) {
    e.preventDefault();

    // these are id's
    var body = $('#body').val();
    var post_id = parseInt($('#post_id').val());
    var user_id = parseInt($('#user_id').val());

    alert(body);
    alert('this is post'+post_id);
    alert('This is user id'+user_id);


    $.ajax({
        type: "POST",
        url: "/comment/{{$post->p_id}}",
        data: {body:body, post_id:post_id, user_id:user_id},
        success: function(msg) {
            $("body").append("<div>"+msg+"</div>");
        }
    });
});


});
0 голосов
/ 13 июня 2019

Каждый из ваших постов имеет 3 элемента .body, .post_id и .user_id.Когда вы нажимаете кнопку, вы выбираете поля ввода на основе этого класса.Но так как у вас есть несколько элементов этого класса, вы всегда выбираете только первый, который приводит к вашей ошибке.Вам нужно выбрать классы из формы, в которой вы щелкнули ссылку:

изменить

// these are id's
var body = $('.body').val();
var post_id = parseInt($('.post_id').val());
var user_id = parseInt($('.user_id').val());

на

var form = $(this).closest('form);
// these are id's
var body = form.find('.body').val();
var post_id = parseInt(form.find('.post_id').val());
var user_id = parseInt(form.find('.user_id').val());

Это должно дать вам элементыправильная форма

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...