Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

We've moved the forum!

Please use forum.silverstripe.org for any new questions (announcement).
The forum archive will stick around, but will be read only.

You can also use our Slack channel or StackOverflow to ask for help.
Check out our community overview for more options to contribute.

Archive /

Our old forums are still available as a read-only archive.

Moderators: martimiz, Sean, Ed, biapar, Willr, Ingo

Completely lost on Ajax forms


Go to End


3 Posts   3127 Views

Avatar
Shane Garelja

Community Member, 18 Posts

28 March 2008 at 1:25pm

Edited: 28/03/2008 1:28pm

I have not been able to figure out how to get a form to submit using Ajax. There is mention of using a FormResponse object here. But then there is no documentation for it.

I have this in my Page_Controller class (NB: Haven't even started on DataObject stuff yet - just want to see this submitting via ajax):

function ContactUsForm() {
      // Create fields			
      $fields = new FieldSet(
         new TextField('FirstName', 'Name', 'Name'),
         new EmailField('Email', 'Email', 'Email'),
         new TextField('Phone', 'Phone No.', 'Phone No.'),
         new CheckboxField('Brochure', 'Email me a brochure'),
         new CheckboxField('Call', 'Please call me'),
         new CheckboxField('Newsletter', 'Sign me up for e-newsletter')
      );
 
      // Create actions
      $actions = new FieldSet(
        new AjaxFormAction('doContactUsForm', 'Submit'),
	new ResetFormAction('doCloseContactUsForm', 'Close')
      ); 
      $reqdFields = new RequiredFields("Email", "FirstName"); 
      return new Form($this, 'ContactUsForm', $fields, $actions);//, $reqdFields);
   }
	 
   function doContactUsForm($data, $form) {	 
      // your form actions
      FormResponse::update_dom_id('ContactFormLiner', '<p>DONE</p>');
      FormResponse::status_message('Done', 'good');        
      // will automatically show the status-message if called by ajax, or redirect on a normal HTTP-request
      return FormResponse::respond();
    }

Avatar
Shane Garelja

Community Member, 18 Posts

31 March 2008 at 6:24pm

Is this just a matter of copying the PageCommentInterface.js example or is there an easier "built-in" method?

Avatar
Ingo

Forum Moderator, 801 Posts

1 April 2008 at 10:31am

AjaxFormAction is only used in specific cms interfaces, we're discussing deprecating it in a sapphire-framework-context, see http://open.silverstripe.com/ticket/2353

PageCommentInterface.js is a good start, you just need basic PrototypeJS functionality to achieve what you're trying to do: http://prototypejs.org/api/ajax/request

You can still use the FormResponse class, just make sure you evaluate the ajax-response rather than simply outputting it (we have a little wrapper called Ajax.Evaluator for this)