javascript - 不知道 django 中的 ajax 返回什么数据?

标签 javascript python django ajax

我想使用 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/

相关文章:

javascript - 错误 : undefined is not an object (evaluating 'ProfileService.getProfile(1).then' )

javascript - 使用javascript在iframe中查看多个url

python - 无法将 numpy 导入嵌入式 ironpython 引擎

python - 比较 ID 的相同列行并将行减少为所需的输出

python - Heroku 上的夹层

python - Django 表单,未提交表单

javascript - Angular 4 中的受控输入组件

javascript - 左加入 lowdb

python - Python 的 VS Code 函数签名 IntelliSense 从哪里来?

python - 如何向 request.POST 添加信息?