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.

Archive

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

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

Completely lost on Ajax forms


Reply

3 Posts   2397 Views

Avatar
Shane Garelja

28 March 2008 at 1:25pm (Last edited: 28 March 2008 1:28pm), Community Member, 18 Posts

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 [url=http://doc.silverstripe.com/doku.php?id=recipes:forms#adding_ajax-behaviour_to_your_forms]here[/url]. 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

31 March 2008 at 6:24pm Community Member, 18 Posts

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

Avatar
Ingo

1 April 2008 at 10:31am Forum Moderator, 801 Posts

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)