2010-12-22 40 views
1

我有一个CGI脚本,可以处理很多事情。我试图保持脚本非常简单和便携。我只需要一些方法让用户向服务器发送消息,而不必丢失当前页面。到目前为止,我有以下过程:如何通过HTTP返回“noop”文档

  1. 用户从CGI脚本加载“状态页面”。
  2. 状态页面有一个javascript定时器,它将每两秒从服务器读取数据(而不是整个页面)并相应地更改状态页面。
  3. 用户单击超链接元素可在服务器上启动作业。
  4. CGI从点击接收参数并启动作业。
  5. 的CGI发送的\n

此时的响应的Firefox会询问用户是否要下载的CGI脚本,当然剧本只是\n的CGI发送。相反,我希望浏览器完全忽略响应。如果我的CGI脚本没有回应\n apache会给出错误。我能做些什么来告诉浏览器忽略响应并保持当前页面?请注意,我宁愿不重新加载当前页面。我在想这种情况下肯定会有某种“noop”HTTP响应。

+0

FWIW,术语是“NOP”。 – 2010-12-22 00:08:47

+3

@Noon:术语[NOOP](http://ftpguide.com/NOOP.htm)[同样有效](http://en.wikipedia.org/wiki/NOP)。 – cdhowie 2010-12-22 00:10:38

+1

如何妥协:NO½P – User1 2010-12-22 00:14:46

回答

3

用204 HTTP状态码发送回应。从RFC 2616 aka Hypertext Transfer Protocol -- HTTP/1.1

10.2.5 204无内容

服务器已完成要求 但并不需要返回 实体主体,并且可能要返回 更新的元信息。响应 可能包含新的或更新的 元信息,其形式为 实体标题,如果存在 应该与 请求的变体相关联。

如果客户端是用户代理,则它应该不会将其文档视图 从导致请求发送到 的请求更改为 。这种反应主要是 旨在允许输入用于操作至 发生而不引起的改变 用户代理的活动文档视图, 虽然任何新的或更新 元信息应该在当前应用于 该文档的用户 剂的活性视图。

204响应不得包含一个 消息体,因此总是 由头字段后的第一个空行 终止。

1

您可能想要调查客户端解决方案,而不是试图解决服务器端的这个问题。例如,使用jQuery,您可以通过单击按钮轻松启动AJAX asynchronous request到服务器。根本不需要在浏览器上加载新页面。

1

而不是超链接是一个真正的<a><form>与默认行为,让它是一些点击由您的客户端代码处理的点击元素。 Javascript代码应该使用XMLHttpRequest对象发送作业请求,并完全控制响应的处理方式。