Ajax实现评论异步

Ajax实现评论异步

提交评论

<!-- 提交评论 -->
            <h3>提交评论</h3>
            <div class="commet-put">
                <!-- <p>请先登录后进行评论</p> -->


                {% if request.user.is_authenticated%}
                <!-- 将post改为json传输数据的形式 -->
                <form id="comment_sent" action="{% url 'article:detail' essay.id %}" method="post">
                    {% csrf_token %}
                    <div>
                        <label> 评论内容</label>
                        <div>
                            <!-- {{ formtext.context }}
                            {{ formtext.context.error }} -->
                            {{ formtext.media }}
                            {{ formtext.as_p }}
                        </div>
                        <span class="text_danger pull-left" id="comment_error"></span>
                        <button type="button" id="btn_comment" class="btn btn-primary pull-right">提交</button>
                    </div>
                </form>
                {% else %}
                请先
                <a href="{% url 'users:login' %}"><button type="button" class="btn btn-primary">登录</button></a>
                后进行评论
                {% endif %}



            </div>

评论列表

<h3>评论列表</h3>
            <div class="comment-list">
                <!-- <p>该文章没有评论,赶紧进行评论吧!</p> -->
                <h4>共有{{ comments.count }}评论</h4>
                <div id="comment_dis">
                    {% for comment in comments %}
                    <hr>
                    <div class="commet_list" id="commet_{{ comment.id }}">
                        <p>
                            <strong style="color: pink">
                                {{ comment.user }}
                            </strong><span style="color: green">
                                {{ comment.created_time|date:"Y-m-d H:i:s" }}
                            </span> 时说:
                        </p>

                        {{ comment.context|safe }}
                        <a href="#"><button type="button" class="btn btn-primary pull-right"> 回复 </button></a>
                        <!-- <a href="#comment_sent"><button type="button" class="btn btn-primary pull-right">  回复  </button></a> -->
                    </div>

                    {% endfor%}
                </div>

                <div class="row">


                </div>



            </div>

javascript代码

// javascript 实现ajax增加评论内容
<script>
    // var comment=document.getElementById("id_context");
    var comment = $("#id_context");
    $("#btn_comment").click(function () {
        $("#comment_error").text("");
        // 如果输入的内容为空,提示输入相关的内容
        if($("#id_context").val() == ""){
            $("#comment_error").text("请输入不能为空");
            return false;
        }

        // 打印textarea的值
        console.log("评论的内容为:", $("#id_context").val());
        console.log("forms发送的值为:",$("#comment_sent").serialize()+'&aid={{ essay.id }}' );

        $.ajax({
            url : "{% url 'article:update_comment' %}",
            type: 'post',
            async: true,
            data: $("#comment_sent").serialize()+'&aid={{ essay.id }}',
            cache: false,
            success: function (data) {
                console.log(data);
                if(data['status'] == 'success'){
                    console.log("发送成功");
                    var comment_html = $('<div class="commet_list" id="commet_'+data['commnet_id']+'"></div>');
                    // comment_html.before('<hr>');
                    var phtml = $("<p></p>");
                    phtml.append($('<strong style="color: pink"></strong>').text(data['username']));
                    phtml.append('于');
                    phtml.append($('<span style="color: green"></span').text(data['comment_time']));
                    phtml.append("时说:");
                    comment_html.append(phtml);
                    comment_html.append(data['text']);
                    comment_html.append($('<a href="#"></a>').append($('<button type="button" class="btn btn-primary pull-right"></button').text("回复")));

                    // console.log("htnls=", htmls);
                    $("#comment_dis").prepend(comment_html);
                    $("#comment_dis").prepend($("<hr>"));

                    // 清空输入框
                    $("#id_context").val("");
                    $("span .cm-link.cm-cm-overlay.cm-matchhighlight").text("");
                    console.log("文本框中的内容为:",  $("#id_context").val() );
                    console.log(data);
                }else{
                    $("comment_error").text(data['message']);
                    console.log("接收失败");
                }  
              },
              error: function(xhr){
                  console.log(xhr);
                  console.log("ajax访问失败!")
              }
        })
    })


</script>

views.py异步响应代码

def update_comment(request):
    refer = request.META.get('HTTP_REFERER', reverse('article:home'))
    form = CommentForms(request.POST)
    data = {}

    if form.is_valid():
        aid = request.POST.get('aid');
        print("aid=", aid)
        comment = Comment()
        # comment = Us
        comment.user = request.user
        comment.article = Article.objects.get(id=aid)
        comment.context = form.cleaned_data['context']
        comment.save()

        # 返回的参数
        data['status'] = 'success'
        data['username'] = request.user.username
        data['comment_time'] = comment.created_time.strftime('%Y-%m-%d %H-%M-%S')
        data['text'] = comment.context
        data['commnet_id'] = comment.id
        print(data)
    else:
        data['status'] = 'Error'
        data['message'] = list(form.errors.values())[0][0]

        # 以Json的形式返回数据
    return JsonResponse(data)

urls.py

 path('update/', views.update_comment, name="update_comment"),

更多的内容请见刘龙韬的博客

相关文章:

  1. Django 搜索后无法分页问题的解决办法
  2. Django中独立的.py文件调用Django模块

提交评论

请先 后进行评论

评论列表

共有0评论