I want to replace my jquery ajax code with es6 fetch api under django framework this is my jquery ajax code
var csrf = $('meta[name="csrf_token"]').attr('value')
//comment vote
$("#comment_box").on('click', "a.vote-up", function() {
var voteID = parseInt(this.id.split("-")[1]);
$.ajax({
url : "/vote_json/",
type : "POST",
dataType: "json",
data : {
"comment_id": voteID,
"vote": $('#up-' + voteID).attr('value'),
csrfmiddlewaretoken: csrf
},
success : function(json) {
$('#up-' + voteID).html('<i class="chevron vote up icon"></i>' + json.vote);
$('#up-' + voteID).popup({
position : 'top center',
content : json.msg,
on : 'manual'
});
$('#up-' + voteID).popup('show');
setTimeout(function (){$('#up-' + voteID).popup('hide');}, 3000);
},
error : function(xhr,errmsg,err) {
alert(xhr.status + ": " + xhr.responseText);
}
});
return false;
});
and this code is es6 fetch api
let csrf = document.querySelector('meta[name="csrf_token"]').getAttribute('value');
//comment vote
[].forEach.call(document.querySelectorAll('a.vote-up'), function (voteup) {
voteup.addEventListener('click', function () {
let voteid = parseInt(voteid.id.split("-")[1]);
fetch('/vote_json/', {
method: 'POST',
body: JSON.stringify({
comment_id: voteid,
vote: document.querySelector('#up-' + voteid).getAttribute('value'),
csrfmiddlewaretoken: csrf
})
}).then(function (response) {
return response.json();
}).then(function (json) {
document.querySelector('#up-' + voteid).innerHTML = '<i class="chevron vote up icon"></i>' + json.vote
document.querySelector('#up-' + voteid.popup({
position : 'top center',
content : json.msg,
on : 'manual'
}),
document.querySelector('#up-' + voteid).popup('show'),
setTimeout(function () {
document.querySelector('#up-' + voteid).popup('hide'), 3000
})
)
})
})
}
and this code is my view in django
def vote(request):
comment_pk = request.POST.get('comment_id')
vote = request.POST.get('vote')
comment = Comment.objects.get(pk=comment_pk)
if vote == 'true':
comment.up += 1
comment.save()
response_dict = dict(vote=comment.up)
elif vote == 'false':
comment.down -= 1
comment.save()
response_dict = dict(vote=comment.down)
return HttpResponse(json.dumps(response_dict), content_type='application/javascript')
the problem is that in jquery code everything is working but in es6 django responsed "CSRF verification failed. Request aborted." and I tested fetch ajax code in Get method without body block and another django view in this mode works fine