This is what I want to do:
I want to send an HTTP request to a server, potentially returning a PDF file. But the server may also just return an error code (PDF file unavailable, PDF file invalid, PDF system down, etc). When I get the PDF, I would like to open the PDF and refresh the page that loaded the PDF, because the PDF is then marked as "read". When I get an error code (or timeout), I would like to redirect the page to开发者_Python百科 an error screen. Downloading Google Chrome works in a similar manner:
http://www.google.com/chrome/eula.html?hl=en&platform=win
This is what I don't want do:
For performance reasons, I don't want to issue two requests as suggested in this question here:
Download and open pdf file using Ajax
Two requests can mean:
- Make a request for the PDF and return a code to indicate whether the PDF is available or not. If unavailable, immediately display an error page
- If it is available, open a window and request the PDF again in that window, and display it.
That's expensive because the PDF's have to be accessed via remote systems. I don't want to access the PDF resource twice. Another solution involving two requests:
- Make a request for the PDF and retrieve an error code or a temporary URL where the PDF is cached. On error, immediately display an error page
- If the PDF is available, open a window in which the cached PDF is displayed.
This will require for quite a large cache for the PDF's
This might be an interesting lead:
I found this question here giving me some information about how I could download the binary data and make it available in JavaScript as binary data:
Is there a way to read binary data in JavaScript?
Maybe that's a nice lead, but of course it won't solve my problem yet, as I want to use the browser's default editor to open the file, just as if I had requested the file from a normal URL.
So the question is:
Can I download binary data and open them like a regular document from JavaScript? If not, I'll cache the document in some managed memory container in Weblogic and just hope that this won't kill our system. Please only respond:
- If you know for sure it cannot be done (some links explaining why would be nice)
- If you know how to do it
- If you have a different solution doing roughly what I want to do (not issuing two requests)
The implemented "old-school" solution works like this:
- The JavaScript client sends an AJAX request to the server to "prepare" a PDF document
- The server responds with any of these three messages:
- a) Document available at URL http://www.example.com/doc.pdf
- b) Document unavailable
- c) Document being "prepared" (i.e. client has to wait)
- The JavaScript client then reacts as such:
- a) Open the returned URL in a new window, refresh the current window after 5 seconds
- b) The current window is redirected to an error screen
- c) The current window stays unchanged and AJAX polling is implemented to repeat step 2
精彩评论