【问题标题】:Like button with Ajax使用 Ajax 的按钮
【发布时间】:2018-05-21 22:05:34
【问题描述】:

我正在尝试使用 ajax 创建一个赞按钮。

这是我的架构:

models.py

class Comentario (models.Model):
    titulo = models.CharField(max_length=50)
    texto = models.CharField(max_length=200)
    autor = models.ForeignKey (Perfil, null=True, blank=True, on_delete=models.CASCADE)
    fecha_publicacion = models.DateTimeField(auto_now_add=True)
    tag = models.ManyToManyField(Tags, blank=True)
    slug = models.SlugField(null=True)
    likes = models.ManyToManyField(Perfil, blank=True, related_name="likes")

    def __str__(self):
        return (self.titulo)

    @property
    def total_likes(self):
        return self.likes.count()

    def save(self, *args, **kwargs):
        self.slug = slugify(self.titulo)
        super(Comentario, self).save(*args, **kwargs)

views.py

def like(request):
    if request.method == 'POST':
        perfil = request.user
        slug = request.POST.get('slug', None)
        comentario = get_object_or_404(Comentario, slug=slug)

        if comentario.objects.filter(id=user.id).exists():
            comentario.likes.remove(user)

        else:
            comentario.likes.add(user)


    contexto = {'likes_count': comentario.total_likes }
    return HttpResponse(json.dumps(contexto), content_type='application/json')

urls.py

url(r'^like$', login_required(like), name='like'),

html

<input type="button" id="like" name="{{ company_slug }}" value="Like" />
<script>
$('#like').click(function(){
      $.ajax({
               type: "POST",
               url: "{% url 'home:like' %}",
               data: {'slug': $(this).attr('titulo'), 'csrfmiddlewaretoken': '{{ csrf_token }}'},
               dataType: "json",
               success: function(response) {
                      alert(response.message);
                      alert(' likes count is now ' + response.likes_count);
            },
                error: function(rs, e) {
                       alert(rs.responseText);
            }
      }); 
})
</script>

当我按下按钮时,它什么也没做。控制台告诉我:

POST htt jquery.min.js:4 p:/127.0.0.1.8000/home/like/404(未找到)

和:http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js

有什么问题?

【问题讨论】:

  • 我已经编辑了代码

标签: python ajax django python-3.x


【解决方案1】:

#1

我可以看到你使用jquery-3.2.1.slim.min.js。这个 (slim) 版本不包括 ajax 模块!

https://blog.jquery.com/2017/03/16/jquery-3-2-0-is-out/

超薄身材

有时您不需要 ajax,或者您更喜欢使用其中一种 专注于 ajax 请求的独立库。而且通常是 更简单地使用 CSS 和类操作的组合 你的网络动画。连同 jQuery 的常规版本, 包括 ajax 和效果模块,我们发布了一个“slim”版本 不包括这些模块。

#2

如我所见,您使用了错误的网址。 在您的 html 部分中,它是 {% url 'home:listar' %},因为 urls.py 仅包含 name='like'

【讨论】:

  • 我怎样才能在 Ajax 中使用 jQuery??
  • 使用完整(非苗条)构建,例如code.jquery.com/jquery-3.2.1.min.js(在您的模板中检查
  • 我做了更改,错误消失了,但按钮仍然不起作用...我认为AJAX部分不正确
  • 需要更多数据!网址正确吗?我看到你使用home:listar url 名称,但你的like 按钮有like 名称
  • 检查发布请求 URL 是否与您在浏览器开发工具网络面板中定义的 URL 匹配
【解决方案2】:

将 JQuery 脚本放在 ajax 代码之前:

<script src="jquery.js"></script>
$('#like').click(function(){
      $.ajax({
               type: "POST",
               url: "{% url 'home:listar' %}",
               data: {'slug': $(this).attr('name'), 'csrfmiddlewaretoken': '{{ csrf_token }}'},
               dataType: "json",
               success: function(response) {
                      alert(response.message);
                      alert(' likes count is now ' + response.likes_count);
            },
                error: function(rs, e) {
                       alert(rs.responseText);
            }
      }); 
})
</script>

【讨论】:

  • 我已经在base.html中添加了它,这个模板继承了。所以,我不认为这是问题..
  • 你能显示你在模板中连接jquery的代码吗?
  • 尝试只使用 jquery 和纯 html 没有 bootstrap 和 pooper.js,你的代码没问题,如果它不起作用尝试连接 jquery cdn
【解决方案3】:

感兴趣的功能(postId){ $.ajax({ 类型:“帖子”, url:"/userInterested?postId="+postId, 数据:postId, 成功:函数(数据){ 控制台.log(数据); 如果(数据 == '1'){ $("#8").addClass("active");
}; } });
}

【讨论】:

  • 请格式化您的代码以使其可读。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-03
  • 1970-01-01
  • 2014-07-26
  • 1970-01-01
  • 2015-06-17
  • 2020-01-22
相关资源
最近更新 更多