我想使用 JavaScript 使我的“点赞”按钮异步,可以点赞帖子,一旦刷新页面,点赞计数就会增加,但我希望点赞计数在不刷新的情况下增加。我试图在不使用任何框架的情况下用纯 JavaScript 来完成此操作,以便我知道它如何真正知道它是如何工作的。有人可以解释如果 request.is_ajax() 为 True 应该返回什么吗?
class PostModel(models.Model):
user = models.ForeignKey(User, default=1, on_delete=models.CASCADE)
title = models.CharField(max_length=50)
message = models.TextField()
date = models.DateTimeField(auto_now_add=True)
likes = models.ManyToManyField(User, blank=True, related_name='post_likes')
def __str__(self):
return self.title
objects = PostManager()
def get_absolute_url(self):
return reverse("birdpost:detail", kwargs={"id": self.id})
def get_like_url(self):
return reverse("birdpost:like-toggle", kwargs={"id": self.id})
class PostLikeToggle(RedirectView):
def get_redirect_url(self, *args, **kwargs):
id_ = self.kwargs.get("id")
request = self.request
obj = get_object_or_404(PostModel, id=id_)
url_ = obj.get_absolute_url()
user = self.request.user
liked = False
updated = False
if user.is_authenticated:
if user in obj.likes.all():
obj.likes.remove(user)
liked = False
else:
obj.likes.add(user)
liked = True
updated = True
data = {
"liked": liked,
"updated": updated
}
if request.is_ajax:
print("AJAX Call.")
return url_
var likeButton = document.getElementsByClassName("like-btn");
for (var i = 0; i < likeButton.length; i++){
likeButton[i].addEventListener('click', function(event){
event.preventDefault()
var likeEndPoint = this.getAttribute("href");
if (window.XMLHttpRequest) {
xhttp = new XMLHttpRequest();
} else {
xhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xhttp.onreadystatechange = someCallBack;
function someCallBack() {
if(xhttp.readyState < 4){
return;
}
if( xhttp.status != 200 ){
return;
}
}
xhttp.open('GET', likeEndPoint, true);
xhttp.send();
});
最佳答案
也许你可以这样做:
from django.http import HttpResponse, JsonResponse
data = {
"liked": liked,
"updated": updated
}
if request.is_ajax:
return JsonResponse(data, safe=False) #this is the response to ajax call
在 ajax 中:
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == XMLHttpRequest.DONE) {
alert(xhr.responseText);// here get the response from Django
}
}
xhr.open('POST', 'my/url', true);
xhr.send(parameters);
要进行 Ajax 调用,您需要一个基于函数示例的 View :
myView(request):
if request.is_ajax:
.....
..
关于javascript - 不知道 django 中的 ajax 返回什么数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56754399/