Backend Ajax protocol
From LimeSurvey Manual
Discussion
There should be a standard JSON protocol between the LS backend and Ajax calls to check for errors, permissions and if the user still is logged in. A suggestion would be to wrap $.ajax
in a function that checks this for you, like LS.ajax
.
All server Ajax calls must return a JSON in the following format:
{
type: int,
result: mixed,
error: {code: int, message: string},
loggedIn: boolean,
hasPermission: boolean,
}
Of course there needs to be server side support for this protocol, too, with helper functions to output correct JSON code, e.g. Ajax::outputResult
or Ajax::outputError($code, $message)
.
Preferably, the function should be able to show an error if server throws 500.
Message types
Type | Fields | Description |
---|---|---|
notloggedin | - | User is not logged in; the login form should appear in a modal and then continue with the action |
nopermission | - | No permission |
success | success : string | Show success message |
error | error : string | Show error message |
custom | result : mixed | Custom action, meaning a supplied Javascript function will take care of the response from the server, e.g. feeding HTML to a modal body. BUT: Maybe we could have a message type "modal" which sends modal title, body and footer? |
Backbone
Since Javascript library Backbone might be used in the future, it would be nice to know how they handle stuff like this.
Some questions:
- Would we need to duplicate the model code in both backend and frontend?
- How much of the CRUD will happen on client?
- How much would backbone replace Yii and things generated with Gii?
Learning material
TODO
Implementation
A first prototype of the backend classes can be seen here. Instead of a helper, this class can actually be put into LSYiiController, making it available to all controllers in LS.
Example:
public function indexAction()
{
$this->ajax->outputSucces(gT('Success!'));
}