lion/packages/ajax
CircleCI ab0b871463 chore: release new versions
- @lion/ajax@0.1.17
 - @lion/button@0.3.17
 - @lion/calendar@0.1.65
 - @lion/checkbox-group@0.1.60
 - @lion/checkbox@0.1.54
 - @lion/choice-input@0.2.31
 - @lion/core@0.2.0
 - @lion/field@0.2.6
 - @lion/fieldset@0.1.53
 - @lion/form-system@0.0.66
 - @lion/form@0.1.59
 - @lion/icon@0.2.7
 - @lion/input-amount@0.1.56
 - @lion/input-date@0.1.54
 - @lion/input-datepicker@0.1.69
 - @lion/input-email@0.1.53
 - @lion/input-iban@0.1.55
 - @lion/input@0.1.53
 - @lion/localize@0.4.16
 - @lion/option@0.1.13
 - @lion/overlays@0.4.0
 - @lion/popup@0.2.45
 - @lion/radio-group@0.1.61
 - @lion/radio@0.1.54
 - @lion/select-rich@0.1.20
 - @lion/select@0.1.51
 - @lion/steps@0.1.16
 - @lion/textarea@0.1.56
 - @lion/tooltip@0.2.45
 - @lion/validate@0.2.31
2019-09-25 11:09:53 +00:00
..
src fix: update storybook/linting; adjust story labels, eslint ignores 2019-04-28 15:02:31 +02:00
stories fix: import from entry points so stories can be extended 2019-05-07 19:46:41 +02:00
test fix: update storybook/linting; adjust story labels, eslint ignores 2019-04-28 15:02:31 +02:00
CHANGELOG.md chore: release new versions 2019-09-25 11:09:53 +00:00
index.js fix(ajax): add setAjax to public api 2019-04-27 14:29:52 +02:00
package.json chore: release new versions 2019-09-25 11:09:53 +00:00
README.md chore: fix style of markdown files 2019-07-24 15:20:19 +02:00

Ajax

ajax is the global manager for handling all ajax requests. It is a promise based system for fetching data, based on axios

Features

  • only JS functions, no (unnecessarily expensive) web components
  • supports GET, POST, PUT, DELETE, REQUEST, PATCH and HEAD methods
  • can be used with or without XSRF token

How to use

Installation

npm i --save @lion/ajax

Example

import { ajax } from '@lion/ajax';

ajax
  .get('data.json')
  .then(response => {
    console.log(response);
  })
  .catch(error => {
    console.log(error);
  });

Create own instances for custom options

Cancel

import { AjaxClass } from '@lion/ajax';

const myAjax = AjaxClass.getNewInstance({ cancelable: true });
myAjax
  .get('data.json')
  .then(response => {
    document.querySelector('#canceled').innerHTML = JSON.stringify(response.data);
  })
  .catch(error => {
    document.querySelector('#canceled').innerHTML = `I got cancelled: ${error.message}`;
  });
setTimeout(() => {
  myAjax.cancel('too slow');
}, 1);

Cancel previous on new request

import { AjaxClass } from '@lion/ajax';

const myAjax = AjaxClass.getNewInstance({ cancelPreviousOnNewRequest: true });
myAjax
  .get('data.json')
  .then(response => {
    document.querySelector('#request1').innerHTML = 'Request 1: ' + JSON.stringify(response.data);
  })
  .catch(error => {
    document.querySelector('#request1').innerHTML = `Request 1: I got cancelled: ${error.message}`;
  });
myAjax
  .get('data2.json')
  .then(response => {
    document.querySelector('#request2').innerHTML = 'Request 2: ' + JSON.stringify(response.data);
  })
  .catch(error => {
    document.querySelector('#request2').innerHTML = `Request 2: I got cancelled: ${error.message}`;
  });

Considerations

Due to a bug in axios options may leak in to other instances. So please avoid setting global options in axios. Interceptors have no issues.

Future plans

  • Endplan is to remove axios and replace it with fetch
  • This wrapper exist so that this switch should not mean any breaking changes for our users