Javascript 使用ajax作为评论表单,它给了我500个内部错误,但没有脚本,这意味着我的脚本是错误的;正确的?

Javascript 使用ajax作为评论表单,它给了我500个内部错误,但没有脚本,这意味着我的脚本是错误的;正确的?,javascript,jquery,python,ajax,django,Javascript,Jquery,Python,Ajax,Django,我有一个有效的评论系统(至少在后端有效)。问题是每次用户提交评论时,页面都会刷新。我为此编写了一个ajax函数,但由于我是一个初学者,我希望会出现错误,我做到了。我有500个内部错误。但我不确定我做错了什么。在这里这是我的密码 <div class='reply_comment'> <form method="POST" action='{% url "comment_create" %}'>{% csrf_token %} <inp

我有一个有效的评论系统(至少在后端有效)。问题是每次用户提交评论时,页面都会刷新。我为此编写了一个ajax函数,但由于我是一个初学者,我希望会出现错误,我做到了。我有500个内部错误。但我不确定我做错了什么。在这里这是我的密码

<div class='reply_comment'>
        <form method="POST" action='{% url "comment_create" %}'>{% csrf_token %}
        <input type='hidden' name='post_id' id='post_id' value='{% url "comment_create" %}'/>
        <input type='hidden' name='origin_path' id='origin_path' value='{{ comment.get_origin }}'/>
        <input type='hidden' name='parent_id' id='parent_id' value='{{ comment.id }}' />
        {% crispy comment_form comment_form.helper %}

        </form>
        </div>



<script>
 $(document).on('submit','.commentForAjax', function(e){
  e.preventDefault();

  $.ajax({
    type:'POST',
    url:'/comment/create',
    data:{
      post_id:$('#post_id').val(),
      origin_path:$('origin_path').val(),
      parent_id:$('#parent_id').val(),
      csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val()
    },
    success:function(){
      alert('it worked');
    }
  })

 })
</script>
编辑:

我没有发布我的views.py,因为它太大了,我认为我写错了ajax。我会发布我的观点

def comment_create_view(request):
    if request.method == "POST" and request.user.is_authenticated():
        parent_id = request.POST.get('parent_id')
        post_id = request.POST.get("post_id")
        origin_path = request.POST.get("origin_path")
        try:
            post = Post.objects.get(id=post_id)
        except:
            post = None

        parent_comment = None
        if parent_id is not None:
            try:
                parent_comment = Comment.objects.get(id=parent_id)
            except:
                parent_comment = None

            if parent_comment is not None and parent_comment.post is not None:
                post = parent_comment.post

        form = CommentForm(request.POST)
        if form.is_valid():
            comment_text = form.cleaned_data['comment']
            if parent_comment is not None:
                # parent comments exists
                new_comment = Comment.objects.create_comment(
                    user=MyProfile.objects.get(user=request.user),
                    path=parent_comment.get_origin, 
                    text=comment_text,
                    post = post,
                    parent=parent_comment
                    )
                #affected_users = parent_comment.get_affected_users()
                #print "this is"
                affected_users = parent_comment.get_affected_users()

                return HttpResponseRedirect(post.get_absolute_url())
            else:
                new_comment = Comment.objects.create_comment(
                    user=MyProfile.objects.get(user=request.user),
                    path=origin_path, 
                    text=comment_text,
                    post = post
                    )
                return HttpResponseRedirect(post.get_absolute_url())
        else:
            messages.error(request, "There was an error with your comment.")
            return HttpResponseRedirect(origin_path)

    else:
        raise Http404
我忘了在这里加这个

urlpatterns += patterns('comments.views',
编辑二,, 我之所以对commentForAjax使用类而不是id,是因为我想对回复注释代码也有同样的效果。我希望两个表单都有一个ajax函数

<div class="make_reply">
    <a href='#' class='reply_btn'>reply</a>
        <div class='reply_comment'>
        <form method="POST" action='{% url "comment_create" %}'>{% csrf_token %}
        <input type='hidden' name='post_id' id='post_id' value='{% url "comment_create" %}'/>
        <input type='hidden' name='origin_path' id='origin_path' value='{{ comment.get_origin }}'/>
        <input type='hidden' name='parent_id' id='parent_id' value='{{ comment.id }}' />
        {% crispy comment_form comment_form.helper %}

        </form>
        </div>
    </div>

您发布的例外信息非常丰富:

异常值:您通过POST调用了此URL,但URL不是以斜杠结尾,并且您已经设置了APPEND\ U斜杠。Django在维护POST数据时无法重定向到斜杠URL。将表单更改为指向127.0.0.1:8000/comment/create/(注意后面的斜杠),或者在Django设置中设置APPEND_slash=False。 请求信息:


因此,您必须在ajax方法中为url添加一个尾随斜杠:

<script>
 $(document).on('submit','.commentForAjax', function(e){
  e.preventDefault();

  $.ajax({
    type:'POST',
    url:'/comment/create/',  //ADD THE SLASH!
    data:{
      post_id:$('#post_id').val(),
      origin_path:$('origin_path').val(),
      parent_id:$('#parent_id').val(),
      csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val()
    },
    success:function(){
      alert('it worked');
    }
  })

 })
</script>

$(文档).on('submit','commentForAjax',函数(e){
e、 预防默认值();
$.ajax({
类型:'POST',
url:“/comment/create/”,//添加斜杠!
数据:{
post_id:$('#post_id').val(),
原点路径:$(‘原点路径’).val(),
父项id:$('#父项id').val(),
csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]')。val()
},
成功:函数(){
警惕(“它起作用了”);
}
})
})

您的脚本中有错误

<script>
    ...
    origin_path:$('origin_path').val(),
    ...
</script>

...
原点路径:$(‘原点路径’).val(),
...
原点路径是一个id而不是标记。取而代之

<script>
    ...
    origin_path:$('#origin_path').val(),
    ...
</script>

...
原点路径:$('#原点路径').val(),
...

要获得更多帮助,您应该打印服务器错误消息

发布视图代码。@AvinashRaj我编辑过,非常感谢您的帮助。您还需要显示实际的Django错误。您可以在浏览器的“网络”选项卡的“开发工具”中找到它-单击Ajax请求。为什么要将
post\u id
设置为表单中的url
在url中添加一个尾随斜杠ajax调用-->
/comment/create/
非常感谢,但是我没有找到404页,我必须输入错误的url..hmw
{%url“comment\u create”%}
的值是多少?将其打印到模板中的某个位置。我无法在html中打印它,它只打印{%url“comment_create”%},它只是一个执行视图的url。comment_create_viewby fixed origin_path:$('#origin_path')。val(),它显示它工作,但我如何使注释工作而不是工作?我希望注释与它一起显示工作消息,但注释未显示,您知道如何解决此问题吗?通过修复原点路径:$(“#原点路径”).val(),它显示它工作,但我如何使评论工作,而不是它的工作??我希望评论显示它工作的消息,但评论没有显示,你知道如何解决这个问题?
<script>
    ...
    origin_path:$('origin_path').val(),
    ...
</script>
<script>
    ...
    origin_path:$('#origin_path').val(),
    ...
</script>