AJAX POST - 我需要发送回复吗?

时间:2016-01-31 23:58:11

标签: ajax django post httpresponse

我编写了一个AJAX函数,它向我的服务器发送POST请求(运行Django 1.9)。

请求应触发服务器上的进程 - 客户端无需执行任何操作。因此,我没有在我的观点的post方法中添加return

但是,在我的服务器的输出中,我发现了一些关于它的错误消息:

Internal Server Error: <url>
Traceback (most recent call last):  
  File "/.../python3.5/site-packages/django/core/handlers/base.py", line 158, in get_response  
    % (callback.__module__, view_name))  
ValueError: The view <view> didn't return an HttpResponse object. It returned None instead.  
ERROR:django.request:Internal Server Error: <url>  
Traceback (most recent call last):  
  File "/.../python3.5/site-packages/django/core/handlers/base.py", line 158, in get_response  
    % (callback.__module__, view_name))  
ValueError: The view <view> didn't return an HttpResponse object. It returned None instead.  
[01/Feb/2016 00:30:28] "POST <url> HTTP/1.1" 500 14165

因此我添加了

return HttpResponse('')

到方法。

然而,这似乎对我来说有点过时了。

  • 是否有必要向POST请求发送响应?
  • 如果是,我可以发送的最基本的回复是什么? (这是我用过的吗?)

2 个答案:

答案 0 :(得分:2)

在向服务器发送请求后,您所做的是处理客户端“不需要任何内容​​”的正确方法。

但是,您通常希望为客户端提供某种成功的消息/操作,无论多么简单,只是为了使用户友好。当用户按下按钮时,它可能会让用户感到困惑,而且看起来没有任何反应。在同样的注意事项中,当出现问题时,应该给出错误信息,这样他们可以告诉某些事情是错误的(因此告诉你)比没有发生任何事情要快得多。

答案 1 :(得分:2)

没有必要向任何请求发送任何回复。你可以关闭连接,但是......

  • django会抛出一个你没有发送任何回复的错误(即使是空的回复)
  • HTTP服务器(nginx,apache或其他)希望您发送任何内容(这是django为响应错误而发送的原因之一)
  • 您的JavaScript会将请求视为失败的

您可以发送的最小响应是:

HTTP/1.1 204 No content

请注意,在一行之后应该有一个空行(但是markdown赢了,让我在代码块的末尾输入空行)。你可以使用以下方式在django中发送:

return HttpResponse(status=204)

但是django会抛出一些标题。你可以摆脱它们,但它毫无意义......