장고, 재활용 가능한 Ajax HttpResponse에는 JSON
이 코드는 '같은'에 관한 것입니다
장고 1.7.2/Python을 보내지 않습니다. 사용자가 '좋아요'버튼을 클릭하면 아약스는 'pushLike'를 호출합니다. 사용자가 전에 기사를 좋아한다면 (MySQL에 저장), 테이블 (DB)의 행을 삭제하십시오. 또는 사용자가 기사를 좋아하지 않으면 행을 만들어 테이블 (DB)에 삽입하십시오.
그 후에 얼마나 많은 기사를 클릭했는지 계산합니다. likeCnt (count)를 ajax에 전달하고 버튼에 씁니다.
likeCnt에는 올바른 값이 있습니다 (서버 mysql 테이블에서 확인). 단추 색이 바뀌지 만 (흰색에서 파란색으로 및 그 반대로) 텍스트는 변경되지 않습니다. json이 아약스에게 전달하지 않은 것처럼 보입니다. 나는 '텍스트'유형으로 데이터를 전달하려고 시도했지만 효과가 있었지만 json이 원한다.
나는 simplejson, json, mimetype, content_type을 HttpResponse에서 시도했다.
도와주세요.
보기
@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')
자바 스크립트
<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>
답해 주셔서 감사합니다. 위의 모든 시도했지만 작동하지 않습니다. 지금 문자열을 사용하여 데이터를 전달 중입니다 ... –
HttpResponse에서 어떤 데이터 유형을 수신합니까? 'console.log (데이터 타입)' –
왜 그런지는 모르겠지만 지금은 작동합니다 !! 제안한 첫 번째 방법을 사용했습니다. 고맙습니다. btw, 데이터 형식이 '정의되지 않음' 무엇입니까? –