Awesome explanation Klaus and what you're saying makes total sense! You 
should definitely speak with Yehuda about doing a writeup on this. This 
is great info.

Rey...


> Rey, sure.
> 
> To make forms accessible with and without Ajax, I start with building 
> the form as if I were building a standard form with its traditional 
> submit and refresh the page behavior. Think of JavaScript being disabled.
> 
> This handling goes all into the else block of my example because there 
> will be no "X-REQUESTED-WITH" header in the http request (I come to that 
> later). You are simply sending back a complete page as response to the 
> form submit.
> 
> In the next step I so called "hijax" that form to enhance the user 
> experience a little bit. This is also refered to as "Progressive 
> Enhancement".
> 
> That means:
> 
> 1. I will pick up the form and switch off the default submit action by 
> adding my own event handler.
> 
> $('#hijax-me').submit({
>      return false;
> });
> 
> 2. Then add some logic to gather all the form values and transmit it via 
> Ajax in the background, while you are pickinq up the form‘s action as well:
> 
> $('#hijax-me').submit({
> 
>      // stupid IE returns an object for the forms action
>      var url = this.attributes[action] && 
> this.attributes[action].nodeValue || this.getAttribute('action');
> 
>      // works fine with very simple forms, just as an example
>      var data = $('input', this).serialize();
> 
>      $.ajax({
>          type: 'POST',
>          url: url,
>          data: data,
>          dataType: 'json',
>          success: function(response) {
>              // show message for example
>          }
>      });
> 
>      return false;
> 
> });
> 
> $.ajax calls the same page as if you were submitting the page in the 
> traditional way. But because jQuery's $.ajax also adds a custom header 
> to the request, of the form "X-Requested-With: XmlHttpRequest" (same as 
> Prototype if I remember correctly) you know in your page how the page 
> was requested and can handle the request according to that.
> 
> This happens in the if block in my example. You can now decide to only 
> send back a part of the page (like only the markuped confirmation 
> message to replace the form, or maybe sendback JSON or XML to be further 
> processed on client-side).
> 
> As a result you still can have all your backend logic in one place and 
> have a 100% accessible form with enhanced user experience if JavaScript 
> is enabled. And in the end this means only a little more work to do, if 
> at all.
> 
> jQuery's form plugin makes it even easier to do that, I think there is 
> an $.ajaxSubmit function, that does all the stuff for you...
> 
> Hope that made it clearer...
> 
> 
> -- Klaus
> 
> _______________________________________________
> jQuery mailing list
> [email protected]
> http://jquery.com/discuss/
> 

_______________________________________________
jQuery mailing list
[email protected]
http://jquery.com/discuss/

Reply via email to