Thanks. This is very helpful. What if I don't want any success text returned? This is for a search engine form. If validation passes (search criteria longer than 2 characters, etc), I just want to submit the full form and not have text returned. Should I somehow be validating against a separate URL than that which the form is being submitted to? If so, how would I do that?
- Matt On Jun 16, 12:47 pm, "T.J. Crowder" <[email protected]> wrote: > Hi, > > You _might_ be able to get it to work with a synchronous ajax call, > but I wouldn't recommend it, the user experience would be pretty ugly. > (Frozen browser for 2-3 seconds, at least.) > > I'd probably rejig things a bit so that validation and submission are > both done at the same time, via ajax: > > $('yourFormId').observe('submit', function(event) { > event.stop(); // Don't submit the form the normal way... > this.request({ // ...and do submit it via ajax > parameters: {viaAjax: true}, > onSuccess: function(response) { > if (response.formOkay) { > // Either show success and update the page in > place, or > // navigate to a result page via window.location > = ... > } > else { > // Show validation errors > } > } > }); > }); > > Note that I added a "viaAjax" parameter to the form. That way, the > target of the form knows whether the form was submitted via ajax or > via the normal form submission mechanism. If via ajax, it validates > and (if valid) updates based on the form data, and return sa JSON- > formatted reply saying the form was okay (or, if not, why not). If via > a normal form submission (e.g., JavaScript is disabled or something), > it processes the form the old way and sends back a complete HTML page. > > The parameters you pass into Form#requeset[1] are merged into the > form's data. Form#request will send to the URL on the form's action > (unless you override it; details in the API docs). > > [1]http://api.prototypejs.org/dom/form/request/ > > HTH, > -- > T.J. Crowder > Independent Software Consultant > tj / crowder software / comwww.crowdersoftware.com > > On Jun 16, 1:23 pm, Matt <[email protected]> wrote: > > > Is there some kind of trick involved? Here's how I would envision it > > working: > > > 1) User tries submitting the form > > 2) Event.observe captures this and sends an AJAX request to a special > > validation URL (PHP using Codeigniter) > > 3) If no errors were returned, continue submitting the original form > > 4) If errors were found, cancel form submission and display > > > Mostly, I can't seem to get a separate AJAX validation request to work > > as the form continues submitting. I could use Event.stop(event), but > > have not found a way to re-start the process if no validation errors > > exist from the validation call. I'd post code, but I have about 15 > > examples of things I've tried and it would just clutter this question. > > > Any ideas? :-( I didn't think form validation would be this > > difficult. > > > Many thanks, > > - Matt -- You received this message because you are subscribed to the Google Groups "Prototype & script.aculo.us" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/prototype-scriptaculous?hl=en.
