2009-12-09 15 views
5

Estoy en proceso de desarrollo de aplicaciones web bastante básicas, principalmente para poder aprender jQuery/ajax/php en el camino (y divertirme un poco). Quiero que sea lo más accesible posible para los usuarios, por lo que debería funcionar con Javascript deshabilitado, validar a AAA y todo eso. Con JS desactivado sería, por supuesto, sin todas las comodidades, pero sin embargo debería hacer el trabajo.cómo debe comportarse la aplicación AJAX cuando Javascript está deshabilitado, ¿práctica común?

Me gustaría hacer un buen uso de Ajax, pero no entiendo completamente cómo debería hacer frente cuando JS está apagado.

Digamos que JS está activado, el usuario envía el formulario, hace clic en el botón enviar y pasa a través de ajax, los datos se envían a register.php (register.php se especifica en el atributo de acción forms). register.php devuelve datos y jQuery muestra el mensaje apropiado. Todo sin recargar la página.

Ahora, si JS está deshabilitado, enviar el formulario a register.php no servirá de mucho.

De la manera que lo entiendo, la solución sería crear un script php para JS habilitado, otro para JS deshabilitado. Por lo tanto, de forma predeterminada, el atributo de acción tendría nonjs_register.php, y si JS estaría habilitado, obligaría a enviar el formulario al js_register.php en lugar del nonjs_register.php predeterminado. Me imagino que sería bastante tedioso crear dos páginas de scripts para cada interacción del usuario con la aplicación, pero esa es la única forma en que se me ocurre en este momento.

Espero que todo eso tenga sentido, pero por favor avíseme si mi explicación no está del todo clara. Ahora, si alguien pudiera explicarme cuál es la práctica común para tratar ese tipo de problema, sería genial.

Respuesta

1

Lo mejor que podría sugerir sería construirlo cómo quisiera que funcione sin las llamadas AJAX. De esta forma, puede obtener una representación precisa de cómo funcionará con JavaScript deshabilitado. Luego comience a trabajar en su JavaScript y continúe probando con/sin JavaScript habilitado.

1

Si utiliza AJAX para implementar alguna parte ESENCIAL de una página, entonces toda la página deberá requerir Javascript.

Esto es algo que debe señalar ANTES de comenzar a implementarlo.

Si desea que Javascript sea opcional, no puede usar AJAX para implementar todas las comunicaciones. Tendrá que usar devoluciones de datos y eventualmente anular los eventos de "clic" de los botones para hacer que la devolución sea asíncrona (a.k.a. con AJAX).

Por lo tanto, le sugiero que escriba la página como si no tuviera Javascript, luego anule algunas funcionalidades más adelante si Javascript está habilitado.

1

Una solución sería tener su archivo register.php reconoce la cabecera HTTP: Accept de solicitudes que recibe y que respondería una de varias maneras:

  1. Si la solicitud entrante tiene

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

    A continuación, se devuelve una página HTML como respuesta.

  2. o si es otra cosa, como por ejemplo

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

    Sería volver JSON (en este caso), o XML si tuviera la tipos de mime apropiados enumerados, por ejemplo.

Luego, en el código Javascript, que manejaría el caso onsubmit y anular el comportamiento normal para llevar a cabo lo que usted sugiere en su pregunta (pero también el cambio de la cabecera Accept, como la de arriba). Si javascript está deshabilitado, el formulario se enviará normalmente y pasará un encabezado que debe activar su PHP para devolver una página web.

+0

Nota: Esto es similar al método Hijax unidos por cxfx, pero utiliza mecanismos más reparador y por lo tanto, usa HTTP de la manera en que realmente se suponía que debía usarse. – JasonWyatt

2

La forma en que trataría este tipo de cosas es utilizar un evento con javascript que cancele la acción predeterminada del formulario. La acción predeterminada de la fórmula es someterse a una URL diferente:

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 función ajax podría presentar a nonJS_register o incluso podría simplemente agregue un parámetro que le indique al script que devuelva los datos en un formato diferente y que no estén encapsulados en HTML.

2

la receta es muy básico:

  1. tire siempre todo en la página antes de JS incluso se llama.
  2. luego cambia todo a través de JS - p. ocultar elementos según sea necesario, etc.
  3. AJAX tiene que conectar en los eventos y cancelar los eventos originales (por ejemplo, al hacer clic el enlace te llevará a otra página HTML generada /PHP sin JS disponibles, pero con JS disponibles que puede cambiar de objetivo para tirar AJAX única y volver falsa, por lo que no va a hacer clic realmente cambiar la página)
Cuestiones relacionadas