用$ .post接受django响应

时间:2016-05-05 13:40:37

标签: jquery django django-views

在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,但我希望有更有效和正确的方法。

2 个答案:

答案 0 :(得分:1)

您在此处不需要异步POST或重新加载。该视图设置为响应HTTP 302,因此它已经要再次往服务器进行往返加载重定向页面。

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

答案 1 :(得分:0)

为了让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