# submitToRemote

## Purpose

Creates a button that submits the surrounding form as a remote ajax call serializing the fields into parameters.

## Examples

Example controller for an application called "shop":

    class BookController {
         def list = { [ books: Book.list( params ) ] }
         def show = { [ book : Book.get( params['id'] ) ] }
    }

Example usages for above controller:

    <g:form action="show">
            Login: <input name="login" type="text"></input>
            <g:submitToRemote update="updateMe" />
    </g:form>
    <div id="updateMe">this div is updated by the form</div>

## Description

Attributes

- `url` - The url to submit to, either a map contraining keys for the action,controller and id or string value
- `update` (optional) - Either a map containing the elements to update for 'success' or 'failure' states, or a string with the element to update in which cause failure events would be ignored
- `before` (optional) - The javascript function to call before the remote function call
- `after` (optional) - The javascript function to call after the remote function call
- `asynchronous` (optional) - Whether to do the call asynchronously or not (defaults to true)
- `method` (optional) - The method to use the execute the call (defaults to "post")

Events

- `onSuccess` (optional) - The javascript function to call if successful
- `onFailure` (optional) - The javascript function to call if the call failed
- `on_ERROR_CODE` (optional) - The javascript function to call to handle specified error codes (eg on404="alert('not found!')")
- `onUninitialized` (optional) - The javascript function to call the a ajax engine failed to initialise
- `onLoading` (optional) - The javascript function to call when the remote function is loading the response
- `onLoaded` (optional) - The javascript function to call when the remote function is completed loading the response
- `onComplete` (optional) - The javascript function to call when the remote function is complete, including any updates

## Source

Show Source

    def submitToRemote = { attrs, body ->
            // get javascript provider
            def p = getProvider()
            // prepare form settings
            attrs.forSubmitTag = ".form"
            p.prepareAjaxForm(attrs)
            def params = [onclick: remoteFunction(attrs) + 'return false',
                          type: 'button',
                          name: attrs.remove('name'),
                          value: attrs.remove('value'),
                          id: attrs.remove('id'),
                          'class': attrs.remove('class')]        out << withTag(name: 'input', attrs: params) {
                out << body()
            }
        }