我是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)
)
答案 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