Ajax requests


There are two different use-cases for sending ajax requests aside from push-state: one is where you want to send arbitrary requests out of the blue based on some user interaction (standard requests), the other is where you want to submit data from a form (form requests).

Warning! Before beginning, be sure you’ve set up the OFW Javascript API properly. Ajax requests will not work without {{ofw.js}} in place.

Standard requests

Standard requests should be used when you just need to perform a regular ajax request.
ofw.ajax.get()docs
ofw.ajax.post()docs
ofw.ajax.submit()docs
ofw.ajax.alert()docs

These methods can be used to send and process and ajax request. See documentation for possible parameters. Like all OFW JS API requests, the URL is relative to the project base url. Here’s an example:

ofw.ajax.post('my/example/?postdata=can&go=here', function(result){
  // Add some processing code here.
});

The above example will call my.ctl.php / example function where you can return an ajax response:

function example(){
  $this->zajlib->ajax('Hello, this is my result');
}

Or perhaps a JSON response:

function example(){
  $this->zajlib->json(array('status'=>'ok'));
}

Form requests

Form requests are not any different from standard requests, but because they automatically populate data from a form element they are a bit easier to use for sending form data. The method parameters are the same for standard and form requests.

$(element).$ofw().get() – send the form data with an ajax GET
$(element).$ofw().post() – send the form data with an ajax POST
$(element).$ofw().submit() – send the form data with an ajax POST and block all further requests (see below)

You can create form manually:

<form id='example'><input type='text' name='title'></form>

Or with the {% input %} tags:

<form id='example'>{% input example.title %}</form>

We can now submit the form:

$('#example').$ofw().submit('my/example/', 'thank/you/page/');

The form data is sent via standard $_GET, $_POST, or $_REQUEST arrays. You can validate the data and perform any necessary actions in the controller method. Then you must return a success or error message depending on the result. We recommend you use the form validation framework for nice, popover errors. See below for a discussion on form responses.

Attention! Only input elements that are inside a form and have a name attribute will be sent!

Standard and form responses

As mentioned before, there is a simple way of responding to OFW form requests, by simply sending a string via ajax. If you send ok, the response is considered successful on the client side. If you send a message (anything other than ‘ok’), the response is considered an error. See examples above.

Another, more advanced way to provide form responses is to send json data.

Here is an example of a successful json request:

Here is an example of an unsuccessful json request:

Any form fields that are listed in the highlight array or the errors object receive the has-error class. If they are in a form-group div the form-group is also marked with the has-error class.

If you use the errors object, the messages will be displayed as Bootstrap Tooltips. You can use the data-parameters to modify their behavior, such as data-placement='left' to change its placement.

Processing responses

You can use a callback function process the response from an ajax request to provide custom functionality. Responses can regular text, html, or json data – depending on what you return in the controller method.

The callback function will receive two parameters:

  • {string} responseTxt – the simple text or html response
  • {mixed|null} responseJson – if your response included json data, this will be the json-decoded data. It will be null if the response is not valid json.

Here’s an example of returning and processing json data:

Blocking form requests

Blocking form requests are to be used if you want to avoid multiple submissions of data because users click the submit button several times (when they are impatient and/or double click).
$(element).$ofw().submit()

The submit method will always use POST and block any additional submit requests while it is still running. It is useful to avoid multiple submits of the same data from a form. Otherwise, it is the same as the above post() form request method.

Visual feedback for blocking requests

Blocking requests are especially useful when the submitting process takes more than just a few milliseconds. If this is the case, you probably also want some sort of visual feedback that the system is thinking, for example a nice little Facebook-style thinking gif:

ajax-loader

This can be done easily with the data-submit-toggle-class attribute. Here’s how to add it:

<img src='{{baseurl}}system/img/assets/ajax-loader.gif' data-submit-toggle-class='hide' class='hide'>

This image will have the hide class by default. When a submit() is started, it will be removed. When a submit() completes, it will be added again.

Modal / popup request responses

In certain cases you just want to display the response in a modal popup. This would be the case when you want to display terms and conditions, cookie policies, etc.

Here’s a simple example implementation:

Updating certain parts of the page

You can use a combination of zaj.ajax.get and {% block %} to easily update only certain parts of the page. See the code example:

Events

If you use a standard ofw json response for your ajax requests, certain events will be triggered based on the result. You can use these events to subscribe to and extend the way your code reacts to the response.

The events are triggered on the $(form) element when $(form).$ofw().submit() or $(form).$ofw().post() is used.

ofw-ajax-response Triggered when any ajax request response is returned.
ofw-ajax-success Triggered if the ajax request returns status: ok or status: success.
ofw-ajax-error Triggered if the ajax request returns status: error.

Outlast Web & Mobile Development (c) 2018 | Privacy Policy |