【问题标题】:How to add a comment to a page using ajax如何使用ajax向页面添加评论
【发布时间】:2019-10-16 21:38:04
【问题描述】:

我试图让用户在一篇文章中发表评论,但不知何故,为了不重新加载我的页面,我必须使用 ajax,而且我对此知之甚少。这是我的评论部分的样子:

<div class="usrcmmnt_list">
      @foreach($comments as $comment)
      <div class="usrcmmnt flex_box">
        <div class="usrcmmnt_pic">
          <img src="{{ $comment->user['profile_image'] }}">
        </div>
        <div class="usrcmmnt_area">
          <p class="usrcmmnt_name">{{ $comment->user['name'] }}</p>
          <div class="usrcmmnt_box">
            <p class="usrcmmnt_text">{{$comment['content']}}</p>
            <p class="usrcmmnt_time"><img src="{{ url('/img/icon_time.png') }}">{{ date("m/d H:m", strtotime($comment->created_at)) }}</p>
          </div>
        </div>
      </div>
      @endforeach
    </div>
    <div class="comment_write">
      <textarea placeholder="Write a comment" name="comment" id="comment" maxLength="255"></textarea>
      <p class="usrcmmnt_text" id="textarea_warning"></p>
      <span class="alert"></span>
      <button class="btn btn_orange btn_m_2" id="saveComment" type="submit">Post comment</button>
    </div>
</div>

在我的脚本部分,我有这个,但它只复制现有的 cmets。这只是为了我的测试:

$('.comment_write button').on('click', function(e){
  e.preventDefault();
  var tmp = document.createElement('div');
  $(tmp).load('myurl', function(data){
    // usrcmmnt_list
    var tmp2 = document.createElement('div');
    $(tmp2).html(data);
    var list = $(tmp2).find('.usrcmmnt_list');

    $(".usrcmmnt_list").append(list);
  });
});

如何使用 ajax 实现我的目标?

【问题讨论】:

    标签: php ajax laravel-blade


    【解决方案1】:

    你必须尝试这样的事情。

    $(document).on('click', '#saveComment', function(){
        if($('#comment').val()==''){
            alert('Please write a Comment First!');
        }
        else{
            var comment = $('#comment').val();
            $.ajax({
                type: 'POST',
                url: '<your url goes here>',
                data: {"comment": comment},
                success: function(){
                   // update comment listing.
                },
            });
        }
    
    });
    

    但是,这里是您可以遵循的完整教程。 https://www.sourcecodester.com/tutorials/php/11819/laravel-comment-post-using-ajax.html

    【讨论】:

      【解决方案2】:

      对此有多种方法,其中一种:

      • 您可以将 cmets 循环 (@foreach) 移动到部分中
      • 创建一个端点来保存用户评论并将新的 cmets 部分返回为 html
      • 更新 DOM

      1. 创建一个新的部分 \resources\views\partials\comments.blade.php 并将其包含到您的 cmets 部分:

         @if ($comments)
          @foreach($comments as $comment)
                <div class="usrcmmnt flex_box">
                  <div class="usrcmmnt_pic">
                    <img src="{{ $comment->user['profile_image'] }}">
                  </div>
                  <div class="usrcmmnt_area">
                    <p class="usrcmmnt_name">{{ $comment->user['name'] }}</p>
                    <div class="usrcmmnt_box">
                      <p class="usrcmmnt_text">{{$comment['content']}}</p>
                      <p class="usrcmmnt_time"><img src="{{ url('/img/icon_time.png') }}">{{ date("m/d H:m", strtotime($comment->created_at)) }}</p>
                    </div>
                  </div>
                </div>
                @endforeach
          @else
          No comments
          @endif
      

      2. 您的 cmets 部分应如下所示:

      <div class="usrcmmnt_list">
          <div id="comments-list">
          @include('partials.comments')
          </div>
          <div class="comment_write">
            <form method="post" action="{{ route('save.comment') }}" id="saveCommentForm">
            <textarea placeholder="Write a comment" name="comment" id="comment" maxLength="255"></textarea>
            <p class="usrcmmnt_text" id="textarea_warning"></p>
            <span class="alert"></span>
            <button class="btn btn_orange btn_m_2" id="saveComment" type="submit">Post comment</button>
            </form>
          </div>
      </div>
      

      3. 在 CommentsController 中创建保存评论方法(您将使用该方法通过 ajax 调用保存用户评论):

      public function save(Request $request)
      {
          /* we assume that your ajax save route is named comment.save */
          /* you might need the postId if you save the comments for a post */
          $comment = $request->input('comment');
          $user    = auth()->user();
          $comment = Comment::create([
              'user_id'=> $user->id,
              'content'=> $comment
          ]);
          $comments = Comment::with('user')->all();
          return view('comments.blade');
      }
      

      4.您的 ajax 调用:

      $(document).ready(function(){
          $('#saveCommentForm').on('submit', function(event) {
              event.preventDefault(); // prevent the form from submiting
              var $form = $(this),
                  url = $form.attr('action');
      
              $.ajax({
                  url: url,
                  method: 'POST', 
                  data: $form.serialize(),
                  success: function(response) {
                      $('#comments-list').html(response); //update the dom
                  },
                  error: function() {
                      alert('An error occurred. Please try again later.');
                  }
              });
          });
      });
      

      我希望这会帮助您入门。

      【讨论】:

        猜你喜欢
        • 2014-05-20
        • 1970-01-01
        • 1970-01-01
        • 2019-10-21
        • 1970-01-01
        • 2021-02-02
        • 1970-01-01
        • 2014-10-03
        • 2021-10-03
        相关资源
        最近更新 更多