2009-05-07 14 views
15

voglio rilevare in uno script, che potrebbe essere schierato al di là del mio controllo, se la pagina è stato consegnato con uno stato HTTP 200, 404 o 500, eccCome rilevare stato HTTP da JavaScript

Questo puo' Sia fatto, giusto?

+0

Puoi guardare il contenuto della pagina per vedere se contiene frasi come "non trovato" o "errore", ma probabilmente è il meglio che puoi fare. – rjmunro

risposta

7

Fare in modo che la pagina esegua XMLHttpRequest su se stessa (utilizzando location.href o document.URL) e verificare lo stato HTTP ottenuto. Sembra essere un modo abbastanza portatile per me. Perché dovresti fare una cosa del genere è fuori dalla mia comprensione però;)

+0

Sì, questa è la soluzione alla quale ho rinunciato - inoltre ho fatto una richiesta HEAD HTTP per evitare che il client scarichi l'intera pagina due volte. Perché voglio farlo? Pensa a un file .js che sto scrivendo per gli amministratori dei siti web da installare sul loro sito web. – EoghanM

+0

Questo è pericoloso, perché la seconda richiesta potrebbe alterare il server in modi imprevisti (ma il DOPPIO POST della pagina), ecc. Inoltre, la stessa richiesta potrebbe riuscire una volta, ma fallire la volta successiva. – WhyNotHugo

+1

Sono confuso, né @EoghanM né me menzionano POST. Dice anche che ha usato HEAD. Usare GET o HEAD dovrebbe essere sicuro poiché sono metodi idempotenti e non dovrebbero causare effetti collaterali. – anddoutoi

1

Pagina A può essere un Javascript che carica la pagina B tramite AJAX e lo visualizza con document.write o in una finestra pop-up o comunque.

In tale strategia, è possibile verificare il codice di ritorno per l'esito positivo/negativo nel gestore AJAX e inviare diversi elementi alla finestra di output in base allo stato.

La maggior parte delle librerie Ajax forniscono un modo per esaminare il codice di ritorno ....

Si veda ad esempio "transport.status" con Ajax.Request in Prototype.js

+0

Sembra che tu sia sulla strada giusta con transport.status - idealmente mi piacerebbe evitare un'altra richiesta HTTP, ma forse questo è l'unico modo? – EoghanM

+0

Non ho esperienza sufficiente per sapere se questo è l'UNICO modo o no. Se usi la risposta che ho dato, dovrai anche rispettare il modello di sicurezza di Javascript e recuperare le pagine SOLO dallo stesso sito. Questo può essere ottenuto, comunque, da abili utilizzi di proxy. – Paul

-2

Perché la necessità di conoscere javascript Questo? Sembra che avrebbe più senso solo incorporarlo in una pagina 404 personalizzata. Non c'è bisogno di rilevare lo stato HTTP della pagina madre (non penso sia possibile - magari fare una chiamata ajax a se stessa dopo ogni carico, ma è semplicemente sciocco). se viene eseguito il codice, la sua garantito per essere un 404

+1

Non riesco a creare una pagina 404 personalizzata poiché lo script è "distribuito al di fuori del mio controllo" - Non sto facendo l'HTML e la pagina 404 non sarà sul mio sito :) – EoghanM

+0

Fare un'estensione del browser e incappare in lo stesso problema: se l'attuale URL 404s è un errore di ortografia di una pagina comune su un determinato sito, sto provando a reindirizzare a quella pagina. Vengo con la soluzione AJAX, poiché non credo che lo stato di cancellazione di una pagina cambierebbe spesso nei millisecondi tra la prima e la seconda richiesta. –

-2

Recentemente ho trovato come farlo (crediti a: hunlock)

AJAX.getAllResponseHeaders() - restituisce come una stringa tutti gli attuali intestazioni in uso. AJAX.getResponseHeader ("headerLabel") - restituisce il valore dell'intestazione richiesta richiesta.

Problemi correlati