I just got this working!  Here's my final JS code.  While the form
itself submits to "/search/result/keyword" as the default action,
validation is an entirely different "/search/validate/searchkeyword"
URL.

<script type="text/javascript">
   Event.observe(window, 'load', function()
   {
      Event.observe('searchkeyword', 'submit', function(event)
      {
         Event.stop(event);
         new Ajax.Request('/search/validate/searchkeyword',
         {
            method: 'post',
            parameters: $('searchkeyword').serialize(true),
            onSuccess: function(t)
            {
               var response = t.responseText || "ERROR|An error has
occurred.";
               var responsearray = response.split('|');
               if( responsearray[0] == 'ERROR' )
{ document.getElementById('searchkeywordvalidate').innerHTML =
responsearray[1]; }
               else { $('searchkeyword').submit(); }
            },
            onFailure: function()
{ document.getElementById('searchkeywordvalidate').innerHTML = 'An
error has occurred.'; }
         });
      });
   });
</script>

Thanks again.

- Matt

On Jun 16, 9:32 pm, Matt <[email protected]> wrote:
> 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.

Reply via email to