【问题标题】:ajax call is not working with djangoajax 调用不适用于 django
【发布时间】:2017-10-10 14:08:09
【问题描述】:

我正在创建一个博客只是为了练习,我想将所有通知标记为当用户查看通知时看到的,如果我转到 url,这是有效的,但是当我使用 ajax 时没有任何反应

javascript:

<script>
$(document).ready(function() {
   $("#testb").click(function(event){
        $.ajax({
             type:"POST",
             url:"{% url 'seen' request.user.username %}",
             success: function(){
                 confirm('it worked')
             }
        });
        return false;
   });

});
</script>

网址 url(r'functions/user/(?P&lt;username&gt;\w+)/seen', views.seen, name='seen')

查看:

def seen(request, username):
    nat = Nat.objects.filter(toUser=username)
    nat.update(show=False)
    return HttpResponse("test")

【问题讨论】:

  • 打开浏览器的调试工具。客户端代码中实际的 url 值是多少?开发控制台有错误吗? JavaScript 代码是否已执行?是否发出了 AJAX 请求?服务器的响应是什么?
  • 感谢您的回复,网址正确,django 服务器控制台在 seen url 处未显示任何活动
  • "the url is right" - 您是假设,还是通过调试确认?当您执行该调试时,上述评论中提出的各种其他问题的答案是什么?
  • 可能需要在数据发布上使用 csrf。首先获取 csrf:“csrf = $('input[name=csrfmiddlewaretoken]').val();”。在ajax上发送数据参数后。 $.ajax({ type:"POST", data: {csrfmiddlewaretoken: csrf}, ... });

标签: javascript jquery ajax django


【解决方案1】:
@csrf_exempt
def seen(request, username):
    if request.method=='POST':
        nat = Nat.objects.filter(toUser=username)
        nat.update(show=False)
        return JsonResponse("test":"json response")

试试这个,它对生产不安全,但正如你所说,只是培训很有用。

【讨论】:

  • docs.djangoproject.com/en/1.11/ref/csrf/#ajax 在 Ajax 部分解释了您必须添加到代码中的内容。然后你还必须以这种方式在 $.ajax 中添加一个字段data:{csrftoken},
猜你喜欢
  • 1970-01-01
  • 2011-04-04
  • 2012-06-24
  • 2021-08-13
  • 2012-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多