[Zope] please wait page

Dieter Maurer dieter@handshake.de
Wed, 17 Jul 2002 22:05:58 +0200

Alejandro Fernandez writes:
 > I'd like to do a page to show to users while something loads. It would
 > show users what queries have been executed from a database as they are
 > executed. If the whole thing works, they then go to the page where they
 > are shown the results of those queries. 
 > I'm doing this with dtml-calls to queries, which if working will say
 > "query executed".
 > But the page I've made to do this doesn't show this info - it only loads
 > once everything is done.
HTTP is a very simple protocol. For each request, you get a single
reponse, i.e. one page.

You can force Zope to send the response and then continue work.
You would use the "RESPONSE.write" method for this.

There is a caveat with this:

  You must either know the total size of the complete response
  or you must use "Transfer-Encoding: chunked" and use
  "chunked" encoding.

  The first alternative means that the continued work may not
  produce any output.

  The second alternative is only available for HTTP/1.1 clients.

  You may try a "Connection: close" header and not send the
  "Content-Length". I am not sure, whether this will
  work, especially because "RESPONSE.write" will add
  a "Content-Length" when it is not specified.

An alternative is to send a complete response (with "RESPONSE.write"),
that uses the non-standard "refresh" meta tag (see a good HTML
documentation) to automatically start a new request.
The continued work must put its results somewhere, maybe in the
session object. The new request will look there and show
the results or refreshes itself again.