【问题标题】:Accepting django response with $.post使用 $.post 接受 django 响应
【发布时间】:2016-08-31 08:03:27
【问题描述】:

在views.py:

def changeCat(request, cat_key) :
    cat = Category.objects.get(pk=cat_key)
    for doc in cat.document_set.all() :
        log_changing(doc.title, 'deleted', doc.pk)
    cat.delete()
    return HttpResponseRedirect(reverse('list'))

在静态 js 文件中:

$.post('/handbook/changeCat/', {"title" : $("#catTitle").val()})

我想让 $.post 函数只接受视图返回的内容,就像它在提交表单或使用 location.href 更改 URL 后执行的操作一样。所以我尝试添加 .success 函数:

.success(function(data){
      //$('html').html(data)//worked bad for me, causing staticfiles issue
      location.reload()//it works, but without using response
  });

为什么我不喜欢 reload() 方法:当出现 500 错误时,我没有收到来自 django 的那个可爱的调试报告,而只得到这个错误代码。 另一种方法是制作隐藏表单并提交,而不是使用$.post,但我希望有更有效和正确的方法。

【问题讨论】:

  • 您可以通过检查浏览器网络选项卡中的响应来获得“可爱的调试报告”,但它可能会告诉您您缺少 csrf_token
  • Imnot missing csrf token because Im 使用 AjaxSetup 插入它,但是在检查 500 响应时(不在示例中)我看到空响应,只有标题。

标签: jquery django django-views


【解决方案1】:

为了让javascript能够读取从服务器发送的数据

success(function(data){

}

它必须是某种形式的可交换格式(xml,json)。 我建议你使用 DjangoRestFramework。 查看此页面:http://www.django-rest-framework.org/tutorial/2-requests-and-responses/

或者你可以在不需要休息框架的情况下做这样的事情: Django view returning json without using template.

【讨论】:

  • 读取数据没有问题,问题是加载为新的html文档...
  • 在这种情况下,只需使用 Jody Boucher 之前所说的表单提交方法。
【解决方案2】:

这里不需要异步POST 或重新加载。该视图已设置为响应 HTTP 302,因此它已经准备再次往返服务器以加载重定向页面。

要么使用一个简单的form.submit(),或者如果你想进行一些处理来确定POST 变量和值应该是什么,那么看看这个SO question/answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    相关资源
    最近更新 更多