【问题标题】:AJAX POST - do I need to send a response?AJAX POST - 我需要发送响应吗?
【发布时间】:2016-05-09 08:16:59
【问题描述】:

我编写了一个 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 请求发送响应?
  • 如果是,我可以发送的最基本的响应是什么? (是我用的那个吗?)

【问题讨论】:

    标签: ajax django post httpresponse


    【解决方案1】:

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

    但是,无论多么简单,您通常都希望向客户提供某种成功消息/操作,只是为了使其用户友好。当用户按下按钮时,它可能会让用户感到困惑,并且看起来什么都没有发生。同样,当出现问题时,他们应该收到一条错误消息,这样他们就可以比什么都没发生更快地判断出问题(并因此告诉你)。

    【讨论】:

    • 谢谢!在我的情况下,服务器是用户启动音乐播放器旁边的树莓派。所以有某种“回应”(虽然它不在网页上)。不过,我仍然会考虑在网页上进行不显眼的通知。
    【解决方案2】:

    没有必要对任何请求发送任何响应。您可以关闭连接,但是...

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

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

    HTTP/1.1 204 No content
    

    请注意,在上面的一行之后应该有一个空行(但 Markdown 不会让我在代码块的末尾输入空行)。您可以使用以下方式在 django 中发送:

    return HttpResponse(status=204)
    

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

    【讨论】:

    • 谢谢!这就是我需要知道的一切:)
    猜你喜欢
    • 1970-01-01
    • 2011-01-14
    • 2019-09-03
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 2020-07-25
    相关资源
    最近更新 更多