views:

1440

answers:

4

I want to detect in a script, which could be deployed beyond my control, whether the page was delivered with a HTTP status of 200, 404 or 500 etc.

This can't be done, right?

+1  A: 

Page A can be a Javascript that loads page B via AJAX and displays it with document.write or in a pop up window or however.

In such a strategy, you can check return code for success/failure in the AJAX handler and send different things to the output window depending on status.

Most Ajax libraries provide a way to examine the return code....

See for instance "transport.status" with Ajax.Request in Prototype.js

Paul
It sounds like you are on the right track with transport.status - ideally I'd like to avoid another HTTP request, but maybe this is the only way?
EoghanM
I'm not experienced enough to know if this is the ONLY way or not. If you use the answer I gave, you will also need to obey Javascript's security model and fetch pages ONLY from the same site. This can be gotten around, though, by clever uses of proxies.
Paul
A: 

Why does the javascript need to know this? Sounds like it would make more sense just to embed it on a custom 404 page. No need to detect HTTP status of the parent page (I don't think it's possible - maybe doing an ajax call to itself after each load, but that's just silly). if the code is being executed, its guaranteed to be a 404

rooskie
I can't create a custom 404 page as the script is 'being deployed beyond my control' - I'm not making the HTML and the 404 page won't be on my site :)
EoghanM
A: 

I recently found how to do it (credits to : hunlock)

AJAX.getAllResponseHeaders() -- returns as a string all current headers in use. AJAX.getResponseHeader("headerLabel") -- returns value of the requested header.

pixeline
+1  A: 

Have the page make a XMLHttpRequest to itself (using location.href or document.URL) and check the HTTP status you get. Seems to be pretty portable way to me. Why you would do a thing like this is beyond my understanding though ;)

anddoutoi
Yes this is the solution I ended up going for - additionally I made a HTTP HEAD request to forestall having the client download the entire page twice.Why I want to do this? Think a .js file that I'm writing for website administrators to install on their website.
EoghanM