Finally got a chance to test this for this Safari bug to see if it
also exists on the iPhone, and to my surprise it is working perfectly
there, almost exactly like Firefox:

Firefox 2.0.0.4:

   run_test()...
   Opening request to poller.cgi (POST; asynchronous)
   Setting onreadystatechange handler
   Sending request
   State change: 0 => 1
   Request was sent.
   State change: 1 => 2
   State change: 2 => 3
   Input: I am now 0 out of 10.
   State change: 3 => 3
   Input: I am now 1 out of 10.
   State change: 3 => 3
   Input: I am now 2 out of 10.
   State change: 3 => 3
   Input: I am now 3 out of 10.
   State change: 3 => 3
   Input: I am now 4 out of 10.
   State change: 3 => 3
   Input: I am now 5 out of 10.
   State change: 3 => 3
   Input: I am now 6 out of 10.
   State change: 3 => 3
   Input: I am now 7 out of 10.
   State change: 3 => 3
   Input: I am now 8 out of 10.
   State change: 3 => 3
   Input: I am now 9 out of 10.
   State change: 3 => 3
   Input: I am now 10 out of 10.
   State change: 3 => 4

iPhone 1.0 (:

   run_test()...
   Opening request to poller.cgi (POST; asynchronous)
   Setting onreadystatechange handler
   Sending request
   Request was sent
   State change: 0 => 2
   State change: 2 => 3
   Input: I am now 0 out of 10.
   State change: 3 => 3
   Input: I am now 1 out of 10.
   State change: 3 => 3
   Input: I am now 2 out of 10.
   State change: 3 => 3
   Input: I am now 3 out of 10.
   State change: 3 => 3
   Input: I am now 4 out of 10.
   State change: 3 => 3
   Input: I am now 5 out of 10.
   State change: 3 => 3
   Input: I am now 6 out of 10.
   State change: 3 => 3
   Input: I am now 7 out of 10.
   State change: 3 => 3
   Input: I am now 8 out of 10.
   State change: 3 => 3
   Input: I am now 9 out of 10.
   State change: 3 => 3
   Input: I am now 10 out of 10.
   State change: 3 => 4

I'm not sure why the trivial difference in the beginning, but we are
quite pleased that even if this doesn't work on the desktop quite
right, that it does work correctly on the iPhone.

I'll have Kalle update the both bug reports:
http://bugs.webkit.org/show_bug.cgi?id=14431 and Apple RADAR Problem
ID is 5298296.

Onward to some sophisticated iPhone AJAX webapps ;-)

-- Christopher Allen


For those of you interested, here is the history:

On 6/25/07, Christopher Allen <[EMAIL PROTECTED]> wrote:
We are in the process of trying to make SynchroEdit
<www.synchroedit.com> work with Safari 3.0, with the eventual goal of
seeing if it is possible to synchroedit documents using an iPhone.

SynchroEdit is an open-source simultaneous web editor (in the style of
SubEthaEdit) that currently only works in Mozilla/Firefox/Camino
browsers. The technique it uses is to synchronize the DOM tree between
multiple machines, so it potentially has some interesting uses beyond
synchronous editing.

For the most part, things seem to be working well, but one feature we
make use of heavily is the readyState==3 effect which is supported by
Firefox. We have read that this feature is unsupported by the WHATWG
spec, and that it will most likely not be implemented into Safari.

The reason why we need this functionality is that we are building
highly-interactive web applications, and we have found that we need to
cut down on the number of connections to and from the HTTP server, in
order to gain performance. Opening a new connection for every
input/output request would slow the browser, and the server, down
substantially. As the browser is the initiator of all requests,
pending output (from server to client) requests can only be determined
by repeatedly polling the server for updates, or by keeping some form
of streaming connection using a technique like the readystate
technique as described below.

Basically, the Firefox technique involves reading the
<XMLHttpRequest>.responseText value while the request itself stays in
readyState==3 (loading). The responseText buffer updates as new input
appears, and in this manner a "streaming data connection" is achieved.

Whenever new data is sent to the browser from the server via the
XMLHttpRequest, Firefox triggers another "readystatechange", even
though the readyState changes "from 3 to 3". This lets coders put in
code akin to "onRead" for a regular TCP connection interface, but in
AJAX apps. This technique has been hugely effective not only for
SynchroEdit, but for other applications that keep a continuous
connection to the server such as interactive chat applications.

On 6/25/07, Geoffrey Garen <[EMAIL PROTECTED]> wrote:
> For the most part, things seem to be working well, but one feature we
> make use of heavily is the readyState==3 effect which is supported by
> Firefox. We have read that this feature is unsupported by the WHATWG
> spec, and that it will most likely not be implemented into Safari.

Where did you hear that? From code inspection, I see that
XMLHttpRequest issues a "ready state change" of 3 every time it
receives data. Can you point me to the relevant part of the WHATWG spec?

> It appears WebKit is not setting the
> responseText variable until the request has completed. Is there a way
> to access this text prior to state 4?

 From code inspection, I see that XMLHttpRequest updates responseText
every time it receives data.

Perhaps you're seeing the results of slightly different networking
implementations. For example, you might need to send data in larger
chunks in order to convince the networking layer to flush its data up
to the application level.


On 6/26/07, Christopher Allen <[EMAIL PROTECTED]> wrote:
We've written up a simple example using perl cgi and js/xhr to
demonstrate this problem. In Firefox, the expected behavior appears.
Every second, a new line appears counting up from 1 to 10. In Safari,
there's a 10 second delay with nothing, and then 10 lines appear
counting up from 1 to 10 all at once, just as the readyState goes from
3 to 4. We never see readyState going from 3 to 3 as we do with
Firefox.

URL demonstrating this behavior: http://www.synchroedit.com/pt/

URL with source code for this test:
http://www.synchroedit.com/pt/perl-test.tar.gz

The perl cgi script has autoflushing enabled, which means the buffer
is flushed for every newline. In Firefox, the responseText is updated
whenever the perl side sends and flushes data, while Safari's
responseText stays empty until the perl cgi closes the connection and
the request enters readyState 4.

On 6/26/07, Geoffrey Garen <[EMAIL PROTECTED]> wrote:
> Is this capability supposed to be to in Safari, thus our test above
> demonstrates a bug?

At first glance, this seems like a bug. I think the best way to proceed is
to get your data into a bug report @ bugs.webkit.org.

On 6/27/07, Kalle Alm <[EMAIL PROTECTED]> wrote:
Sorry for spamming the list, but thought I'd add that I've filed this as
a bug here: http://bugs.webkit.org/show_bug.cgi?id=14431

On 6/27/07, Kalle Alm [EMAIL PROTECTED]> wrote:
Filed Apple bug as well -- the URL looks weird, but maybe it works.
Problem ID is 5298296; URL which may or may not work is:
https://bugreport.apple.com/cgi-bin/WebObjects/RadarWeb.woa/1/wo/P1gr2UkN22B8VVelCsmWn0/4.22
_______________________________________________
webkit-dev mailing list
webkit-dev@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-dev

Reply via email to