# 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()
    		}
        }