请求不工作

时间:2014-08-29 11:31:28

标签: javascript jquery ajax django

我是AJAX的新手,我做了一个简单的测试,看看我是否可以使用AJAX。

如果我按下“赞”按钮,服务器应该增加1,并通过提醒用户回复最新的计数。

现在,我收到一条警告'错误'。它现在筹集了404

看起来AJAX请求失败了。为什么会这样?

index.html (部分)

<div>
   {{ cmt.body }}<br/>
   <strong>
       <span class="like_count" style="color:green">{{cmt.likes}}</span>
       <button type="button" class="like_btn" data-cmt_id="{{ cmt.id }}">Like</button>
   </strong>
</div>

views.py

def update_like(request):
    if request.is_ajax():
        try:
            cmt = Comment.objects.get(pk=int(request.POST['cmid']))
            cmt.likes += 1
            cmt.save()
        except KeyError:
            return HttpResponse('Error')

        return HttpResponse(cmt.likes)

default.js (在base.html中导入index.html扩展)

$(document).ready(function(){
        $('.like_btn').on('click', function(){
            var comment = $(this).attr('data-cmt_id');
            $.ajax({
                url: '/comment/update_like',
                type: "POST",
                data: {
                    cmid: comment
                },
                success: function(data){
                    alert("!!"+data);
                },
                error: function(){
                    alert('error');
                }
            });
        })
    });

加成:::

urls.py

urlpatterns = patterns('',
    (r'^$', index),

    url(r'^admin/', include(admin.site.urls)),

    url(r'^comment/update_like/$', update_like)
)

2 个答案:

答案 0 :(得分:0)

好的,我终于设法解决了这个问题。

首先感谢 mrcrgl 。我四处寻找一个调试控制台,它给了我详细的信息,并且结果显示IE网络选项卡提供了大量详细信息:)

最初的问题是通过查看响应正文来确定的,这是一个错误页面,没有在js url的末尾加上'/'。

应该是

 url: '/comment/update_like/'

 url: '/comment/update_like'

在此之后,我获得了403 Forbidden。快速谷歌搜索给了我这个

403 Forbidden error when making an ajax Post request in Django framework

原来是缺少的CSRF令牌导致了问题。 我刚刚添加了

@csrf_exempt

在我的update_like视图之上,它现在可以找到;)

答案 1 :(得分:0)

因此更改URL的工作原理是ajax后请求,但要么将其更改为ajax中的GET请求,要么如果要使用POST请求,则传递csrf令牌是个好主意。

因此,如果您希望csrf令牌存在,这对于POST ajax方法很有用,那么您可以删除@csrf标记,并在您的java脚本中编写一个方法来获取此处建议的csrf令牌

https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax