2009-12-09 6 views
5

Sono in procinto di sviluppare un'applicazione web piuttosto semplice, che è soprattutto per imparare jQuery/ajax/php (e divertirmi un po '). Voglio renderlo accessibile agli utenti il ​​più possibile, quindi dovrebbe funzionare con Javascript disabilitato, convalidare su AAA e tutto il resto. Con JS disabilitato sarebbe ovviamente senza tutte le campane e fischietti, ma ciononostante dovrebbe fare il lavoro.come deve comportarsi l'applicazione AJAX quando Javascript è disabilitato - pratica comune?

Mi piacerebbe fare buon uso di Ajax, ma non capisco appieno come dovrei far fronte quando JS è spento.

Quindi diciamo che JS è attivo, l'utente invia il modulo, fa clic sul pulsante di invio e tramite ajax, i dati vengono inviati a register.php (register.php è specificato nell'attributo action form). register.php restituisce i dati e jQuery visualizza il messaggio appropriato. Tutto senza ricaricare la pagina.

Ora, se JS è disabilitato, l'invio di form a register.php non andrà molto bene.

Per come ho capito, la soluzione sarebbe creare uno script php per JS abilitato, altro per JS disabilitato. Pertanto, per impostazione predefinita, il form avrebbe attributo di azione con nonjs_register.php e, se JS sarebbe abilitato, imporrà il modulo a js_register.php anziché il valore predefinito nonjs_register.php. Posso immaginare che sarebbe piuttosto noioso creare due pagine di script per ogni interazione dell'utente con l'applicazione, ma questo è l'unico modo che posso pensare al momento.

Spero che tutto ciò abbia senso, ma per favore fatemi sapere se la mia spiegazione non è abbastanza chiara. Ora, se qualcuno potesse spiegarmi qual è la pratica comune per affrontare quel tipo di problema sarebbe grandioso.

risposta

1

La cosa migliore che potrei suggerire sarebbe di costruirla come si vorrebbe che funzioni senza le chiamate AJAX. In questo modo puoi ottenere un ritratto accurato di come funzionerà con JavaScript disabilitato. Quindi inizia a lavorare nel tuo JavaScript e continua a testare con/senza JavaScript abilitato.

1

Se si utilizza AJAX per implementare parte ESSENTIAL di una pagina, l'intera pagina dovrà richiedere Javascript.

Questa è una cosa che devi sottolineare PRIMA di iniziare a implementarla.

Se si desidera rendere Javascript facoltativo, non è possibile utilizzare AJAX per implementare tutte le comunicazioni. Dovrai utilizzare i postback e infine sostituire gli eventi "clic" dei pulsanti per rendere il postback asincrono (a.k.a. con AJAX).

Quindi, ti suggerirei di scrivere la pagina come se non avessi Javascript, quindi sovrascrivi alcune funzionalità in seguito se Javascript è abilitato.

1

Una soluzione sarebbe quella di avere il file register.php riconoscere l'header HTTP: Accept nelle richieste che riceve e avrebbe risposto uno dei diversi modi:

  1. Se la richiesta in entrata ha

    Accept: application/xhtml + xml, text/html, multipart/mixed, */*

    Quindi restituire una pagina HTML come risposta.

  2. o se è qualcosa di diverso, come ad esempio

    Accept: application/json, application/javascript, text/javascript

    Sarebbe tornare JSON (in questo caso), o XML se avesse il ad esempio i tipi mime appropriati elencati.

Poi nel codice JavaScript, devi gestire l'evento onsubmit e ignorare il comportamento normale di eseguire quello che suggeriscono nella tua domanda (ma anche cambiando l'intestazione Accept, come sopra). Se javascript è disabilitato, il modulo verrà inviato normalmente e passerà lungo un'intestazione che dovrebbe attivare il PHP per restituire una pagina web.

+0

Nota: Questo è simile al metodo Hijax collegati da cxfx, ma utilizza meccanismi più riposante e quindi usa HTTP nel modo in cui era veramente destinato ad essere usato. – JasonWyatt

2

Il modo in cui mi occupo di questo genere di cose consiste nell'utilizzare un evento con javascript che annulla l'azione predefinita del modulo. L'azione predefinita del modulo è quello di inviare a un diverso URL:

html

<form id="AjaxForm" action="/nonJS_register.php" method="POST"> 
    <!-- form input elements --> 
</form> 

js

document.getElementById("AjaxForm").onsubmit = function() 
{ 
    //- do ajax posting... 
    ajaxPostForm(); 

    //- Cancel the default action of the form 
    event.preventDefault(); 
    return false; 
} 

La funzione ajax potrebbe presentare al nonJS_register o si potrebbe anche solo aggiungi un parametro che dice allo script di restituire i dati in un formato diverso e non incapsulato da HTML.

2

la ricetta è molto semplice:

  1. sempre tirare tutto sulla pagina prima di JS viene anche chiamato.
  2. quindi cambia tutto tramite JS - ad es. nascondere elementi come richiesto ecc
  3. AJAX ha bisogno di collegare sugli eventi ed annullare gli eventi originali (ad esempio cliccando il link ti porterà ad un'altra pagina generata HTML/PHP senza JS a disposizione, ma con JS disponibili si possibile modificare gli obiettivi di tirare AJAX solo e restituire false, quindi fare clic su non si realmente cambiare la pagina)
Problemi correlati