Django 1.7.2 / python 3.4
此代码与'类似'。 如果用户点击'喜欢'按钮,ajax调用' pushLike'。 如果用户之前喜欢过该文章(保存在Mysql中),则删除表格(DB)上的行。 或者如果用户不喜欢文章,请创建一行并将其插入表格(DB)。
之后,计算点击该文章的人数。 我想将likeCnt(count)传递给ajax,并将其写在按钮上。
likeCnt具有正确的值(我在服务器mysql表上检查过它)。 按钮颜色确实改变(白色到蓝色,反之亦然),但文本不会改变。 似乎json没有传递给ajax。我尝试通过' text'传递数据。类型,它确实有效,但我希望它由json。
我在HttpResponse上尝试过simplejson,json,mimetype,content_type。
请帮帮我。
视图
@login_required
def pushLike(request):
pk = request.GET['writing_id']
try:
la = LikeArticles.objects.get(user = User.objects.get(username=request.user.username), article_id=pk)
if(la.is_like()):
la.delete()
likeCnt = LikeArticles.objects.filter(article_id=pk).count()
FreeBoards.objects.filter(id=pk).update(like = likeCnt)
else: #Never happens
la.like = True
la.save()
likeCnt = LikeArticles.objects.filter(article_id=pk).count()
FreeBoards.objects.filter(id=pk).update(like = likeCnt)
except ObjectDoesNotExist:
la = LikeArticles(user = User.objects.get(username=request.user.username),
article = FreeBoards.objects.get(id=pk),
like = True,
)
la.save()
likeCnt = LikeArticles.objects.filter(article_id=pk).count()
FreeBoards.objects.filter(id=pk).update(like = likeCnt)
data = {'likeCnt': likeCnt}
# return render(request, url, context)
return HttpResponse(simplejson.dumps(data), mimetype='application/javascript')
的javascript
<script type="text/javascript">
$(document).ready(function(){
$('#btn-like').click(function(){
var e = $('#btn-like').css('background-color');
$.ajax({
url : '/sle/freeboards/pushLike/',
data : {'writing_id':{{writing_id}},
},
dataType : "json",
success:function(data){
alert(data.likeCnt);
if(e == 'rgb(59, 89, 152)') {
$('#btn-like').css('background-color', '#ffffff').css('color', '#000000');
$('#btn-like').text(data.likeCnt);
} else {
$('#btn-like').css('background-color', '#3b5998').css('color', '#ffffff');
$('#btn-like').text(data.likeCnt);
}
},
failure: function(data){
alert('fail!!')
}
});
});
});
</script>
答案 0 :(得分:0)
您希望确保在HttpResponse中设置正确的mimetype
@login_required
def pushLike(request):
...
# return json -- !!not javascript!!
return HttpResponse(simplejson.dumps(...), mimetype="application/json")
- 或 -
@login_required
def pushLike(request):
...
# return json -- !!not javascript!!
return JsonResponse({"your": "context dictionary"})
如果这不起作用,您是否尝试使用Jquery代码解析json?
即:
$.ajax({
...
success: function(data){
var response = $.parseJSON(data);
...
}
});
javascript实际上可能会从您为django应用程序提供的任何内容中回收字节...所以不是让JSON回来,而是实际上得到的字符串看起来像JSON。 http://api.jquery.com/jquery.parsejson/