Trying to make a progress bar for a form upload (old HTML4 form upload, not new HTML5 API). The progress actually tracks additional work being done after the file has moved. The way it has been designed is that the stream stays opened until after the additional work is done, and then the server-side method finally returns, which closes the stream.
I'm having some issues that may be specific to Chrome. I do also have a working implementation, but I'm hoping to get something "better".
For anybody who is likely to ask for code: it's intentionally not here. The scenario explains the problem; the code itself wasn't "at fault" and will just be more clutter.
Failed attempt #1 in a nutshell
Reason for failure: the upload stream blocks other activity on the page, and you cannot make additional Ajax calls during the transfer.
Failed attempt #2 in a nutshell
before initiating the form upload, I could render "status: waiting" from the JSON. The rendering function also incremented a counter so I would see "attempt #X". The # of attempts would increment while status is waiting.
after transfer initiated, the Ajax calls were successfully getting 200 and I could inspect the responses to see that the JSON was in fact there.
HOWEVER, I could not update the "shadow DOM" (is that the correct term?) in the iFrame. Attempts to access nodes within the iFrame and modify them failed. Even the counter did not increment.
When the transfer completed, it would then successfully render "status: complete" and the counter would jump ahead (the counter was incrementing, but rendering it to the iFrame just wasn't working)
The iFrame does not request Ajax anymore. The iframe's src attribute is set to a URL that returns a pre-rendered progress bar. The document being loaded into the iframe is set to reload itself. So at the prescribed interval, it re-renders a new progress bar which has "moved along".
The result is a "working" progress bar, although sometimes the lag in the request causes the iframe to be blank for a split second, which isn't my preference.
Can anybody think of a better way to do this? Is it possible that I could have the form itself in the iFrame and the Ajax work in the "top" document instead?
I mainly want to divide the presentation layer from the data layer, but as long as I have to return a rendered progress bar, that isn't going to work. As a bonus, if I can find a way to update the progress bar via Ajax, I won't have those "blank" blips.
I decided to use: http://blueimp.github.io/jQuery-File-Upload/ because it is free and gives you nice progress bar.