Calling a Server-Side Action
Call a server-side controller action from a client-side controller. In the client-side controller, you set a callback, which is called after the server-side action is completed. A server-side action can return any object containing serializable JSON data.
A client-side controller is a JavaScript object in object-literal notation containing a map of name-value pairs.
Let’s say that you want to trigger a server-call from a component. The following component contains a button that’s wired to a client-side controller echo action. SimpleServerSideController contains a method that returns a string passed in from the client-side controller.
This client-side controller includes an echo action that executes a serverEcho method on a server-side controller.
Use unique names for client-side and server-side actions in a component. A JavaScript function (client-side action) with the same name as an Apex method (server-side action ) can lead to hard-to-debug issues. In debug mode, the framework logs a browser console warning about the clashing client-side and server-side action names.
In the client-side controller, we use the value provider of c to invoke a server-side controller action. We also use the c syntax in markup to invoke a client-side controller action.
The cmp.get("c.serverEcho") call indicates that we’re calling the serverEcho method in the server-side controller. The method name in the server-side controller must match everything after the c. in the client-side call. In this case, that’s serverEcho.
The implementation of the serverEcho Apex method is shown in Apex Server-Side Controller Overview.
Use action.setParams() to set data to be passed to the server-side controller. The following call sets the value of the firstName argument on the server-side controller’s serverEcho method based on the firstName attribute value.
action.setCallback() sets a callback action that is invoked after the server-side action returns.
The server-side action results are available in the response variable, which is the argument of the callback.
response.getState() gets the state of the action returned from the server.
You don’t need a cmp.isValid() check in the callback in a client-side controller when you reference the component associated with the client-side controller. The framework automatically checks that the component is valid.
response.getReturnValue() gets the value returned from the server. In this example, the callback function alerts the user with the value returned from the server.
$A.enqueueAction(action) adds the server-side controller action to the queue of actions to be executed. Actions that are enqueued will run at the end of the event loop. Rather than sending a separate request for each individual action, the framework processes the event chain and batches the queued actions into fewer, more efficient requests.
Actions are sent to the server asynchronously, and can execute and return in any order. Action callbacks are also asynchronous, and can execute in a different order than the actions themselves. See Batching of Server-side Actions.
-
Passing Data to an Apex Controller
Use
action.setParams()in JavaScript to set data to pass to an Apex controller. -
Returning Data from an Apex Server-Side Controller
Return results from a server-side controller to a client-side controller using the
returnstatement. Results data must be serializable into JSON format. -
Returning Errors from an Apex Server-Side Controller
Create and throw a
System.AuraHandledExceptionfrom your Apex controller to return a custom error message to a JavaScript controller. -
Call a server-side controller action from a client-side controller. The action can have different states during processing.
See Also