AJAX POST - 我需要发送回复吗?
AJAX POST - do I need to send a response?
我编写了一个 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 请求发送响应?
- 如果是,我可以发送的最基本的回复是什么? (是我用的那个吗?)
您所做的是在向服务器发送请求后处理客户端 "not needing anything" 的正确方法。
但是,您通常希望为客户提供某种成功 message/action,无论多么简单,只是为了使它对用户友好。当用户按下按钮并且看起来没有任何反应时,这可能会让用户感到困惑。同样,当出现问题时,他们应该收到一条错误消息,这样他们就可以比什么都没有发生时更快地判断出问题(并因此告诉您)。
没有必要对任何请求发送任何响应。您可以关闭连接,但是...
- django 将抛出一个错误,表明您没有发送任何响应(即使是空响应)
- HTTP 服务器(nginx、apache 或其他服务器)期望您发送任何内容(这是 django 发送错误响应的原因之一)
- 您的 JavaScript 会将请求视为失败请求
您可以发送的最小回复是:
HTTP/1.1 204 No content
注意上面一个后面应该有一个空行(但是markdown不会让我在代码块的末尾输入空行)。您可以使用以下方式在 django 中发送:
return HttpResponse(status=204)
但 django 会抛出一些 headers。你可以摆脱它们,但这毫无意义...
我编写了一个 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 请求发送响应?
- 如果是,我可以发送的最基本的回复是什么? (是我用的那个吗?)
您所做的是在向服务器发送请求后处理客户端 "not needing anything" 的正确方法。
但是,您通常希望为客户提供某种成功 message/action,无论多么简单,只是为了使它对用户友好。当用户按下按钮并且看起来没有任何反应时,这可能会让用户感到困惑。同样,当出现问题时,他们应该收到一条错误消息,这样他们就可以比什么都没有发生时更快地判断出问题(并因此告诉您)。
没有必要对任何请求发送任何响应。您可以关闭连接,但是...
- django 将抛出一个错误,表明您没有发送任何响应(即使是空响应)
- HTTP 服务器(nginx、apache 或其他服务器)期望您发送任何内容(这是 django 发送错误响应的原因之一)
- 您的 JavaScript 会将请求视为失败请求
您可以发送的最小回复是:
HTTP/1.1 204 No content
注意上面一个后面应该有一个空行(但是markdown不会让我在代码块的末尾输入空行)。您可以使用以下方式在 django 中发送:
return HttpResponse(status=204)
但 django 会抛出一些 headers。你可以摆脱它们,但这毫无意义...