YouTip LogoYouTip

Vue3 Ajax Axios

For Vue, it is recommended to use axios to handle Ajax requests. Axios is a Promise-based HTTP library that can be used in both browsers and node.js. Github open-source address: [https://github.com/axios/axios](https://github.com/axios/axios) ### Installation Methods **Using CDN:** or **Using npm:** $ npm install axios **Using bower:** $ bower install axios **Using yarn:** $ yarn add axios ### Usage Import the default exported axios object from the axios module: import axios from 'axios'; **1. Making a GET Request** Make a request for a user with a given ID: ## Example axios.get('/user?ID=12345') .then(function(response){ // Handle success console.log(response); }) .catch(function(error){ // Handle error console.log(error); }) .finally(function(){ // Always executed }); **The above request can also be implemented as follows:** ## Example axios.get('/user',{ params:{ ID:12345 } }) .then(function(response){ console.log(response); }) .catch(function(error){ console.log(error); }) .finally(function(){ // Always executed }); If you want to use async/await, add the async keyword to the outer function/method. ## Example async function getUser(){ try{ const response = await axios.get('/user?ID=12345'); console.log(response); }catch(error){ console.error(error); } } **Note:** async/await is part of ECMAScript 2017 and is not supported in Internet Explorer and older browsers, so use it with caution. **2. Making a POST Request** ## Example axios.post('/user',{ firstName:'Fred', lastName:'Flintstone' }) .then(function(response){ console.log(response); }) .catch(function(error){ console.log(error); }); Execute multiple requests concurrently: ## Example function getUserAccount(){ return axios.get('/user/12345'); } function getUserPermissions(){ return axios.get('/user/12345/permissions'); } Promise.all([getUserAccount(), getUserPermissions()]) .then(function(results){ const acct = results; const perm = results; }); ### Browser Support !(#) * * * ## GET Method We can simply read JSON data: ## GET Example const app = {data(){return{info: 'Ajax Test!!'}}, mounted(){axios .get('') .then(response =>(this.info = response)) .catch(function(error){console.log(error); }); }}Vue.createApp(app).mount('#app') [Try it Β»](#) Use response.data to read JSON data: ## GET Example

Website List

{{ site.name }}
const app = { data() { return { info: 'Ajax Test!!' } }, mounted () { axios .get('') .then(response => (this.info = response.data.sites)) .catch(function (error) { // Handle request failure console.log(error); }); } } Vue.createApp(app).mount('#app') [Try it Β»](#) The format for passing parameters with the GET method is as follows: ## Parameter Passing Explanation axios.get('/user?ID=12345') .then(function(response){console.log(response); }) .catch(function(error){console.log(error); }); axios.get('/user', {params: {ID: 12345}}) .then(function(response){console.log(response); }) .catch(function(error){console.log(error); }); * * * ## POST Method ## POST Example const app = {data(){return{info: null}}, mounted(){axios .post('') .then(response =>(this.info = response)) .catch(function(error){console.log(error); }); }}Vue.createApp(app).mount('#app') [Try it Β»](#) The format for passing parameters with the POST method is as follows: ## Parameter Passing Explanation axios.post('/user', {firstName: 'Fred', lastName: 'Flintstone'}) .then(function(response){console.log(response); }) .catch(function(error){console.log(error); }); * * * ## Executing Multiple Concurrent Requests ## Example function getUserAccount(){return axios.get('/user/12345'); }function getUserPermissions(){return axios.get('/user/12345/permissions'); }axios.all([getUserAccount(), getUserPermissions()]) .then(axios.spread(function(acct, perms){})); * * * ## axios API Requests can be created by passing relevant configuration to axios. ## Example axios(config)axios({method: 'post', url: '/user/12345', data: {firstName: 'Fred', lastName: 'Flintstone'}}); axios({method:'get', url:'http://bit.ly/2mTM3nY', responseType:'stream'}) .then(function(response){response.data.pipe(fs.createWriteStream('ada_lovelace.jpg'))}); axios(url[, config])axios('/user/12345'); ### Request Method Aliases For convenience, the official library provides aliases for all supported request methods, which can be used directly to make requests: axios.request(config) axios.get(url[, config]) axios.delete(url[, config]) axios.head(url[, config]) axios.post(url[, data[, config]]) axios.put(url[, data[, config]]) axios.patch(url[, data[, config]]) **Note:** When using alias methods, the url, method, and data properties do not need to be specified in the config. ### Concurrency Helper functions for handling concurrent requests: axios.all(iterable) axios.spread(callback) ### Creating Instances A new axios instance can be created with custom configuration: axios.create()const instance = axios.create({ baseURL: 'https://some-domain.com/api/', timeout: 1000, headers: {'X-Custom-Header': 'foobar'}}); ### Instance Methods The following instance methods are available. The specified config will be merged with the instance's config: axios#request(config) axios#get(url[, config]) axios#delete(url[, config]) axios#head(url[, config]) axios#post(url[, data[, config]]) axios#put(url[, data[, config]]) axios#patch(url[, data[, config]]) ### Request Configuration Below are the configuration options available when creating a request. Note that only url is required. If method is not specified, the request will default to using the get method. { // `url` is the server URL that will be used for the request url: "/user", // `method` is the request method to be used when making the request method: "get", // default // `baseURL` will be prepended to `url` unless `url` is an absolute URL. // It can be useful to set `baseURL` for an instance of axios to pass relative URLs to methods of an instance. baseURL: "https://some-domain.com/api/", // `transformRequest` allows changes to the request data before sending it to the server // This only works for request methods 'PUT', 'POST', 'PATCH' and 'DELETE' // The last function in the array must return a string or an ArrayBuffer, or Stream transformRequest: [function (data) { // Do whatever you want to transform the data return data; }], // `transformResponse` allows changes to the response data to be made before it is passed to then/catch transformResponse: [function (data) { // Do whatever you want to transform the data return data; }], // `headers` are custom headers to be sent headers: {"X-Requested-With": "XMLHttpRequest"}, // `params` are the URL parameters to be sent with the request // Must be a plain object or a URLSearchParams object params: { ID: 12345 }, // `paramsSerializer` is a function responsible for serializing `params` // (e.g. https://www.npmjs.com/package/qs, http://api.jquery.com/jquery.param/) paramsSerializer: function(params) { return Qs.stringify(params, {arrayFormat: "brackets"}) }, // `data` is the data to be sent as the request body // Only applicable for request methods 'PUT', 'POST', and 'PATCH' // When no `transformRequest` is set, must be of one of the following types: // - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams // - Browser only: FormData, File, Blob // - Node only: Stream data: { firstName: "Fred" }, // `timeout` specifies the number of milliseconds before the request times out // If the request takes longer than `timeout`, the request will be aborted timeout: 1000, // `withCredentials` indicates whether or not cross-site Access-Control requests // should be made using credentials withCredentials: false, // default // `adapter` allows custom handling of requests which makes testing easier // Return a promise and apply a valid response (see (#response-api)). adapter: function (config) { /* ... */ }, // `auth` indicates that HTTP Basic auth should be used, and supplies credentials. // This will set an Authorization header, overwriting any existing Authorization // custom headers set in `headers`. auth: { username: "janedoe", password: "s00pers3cret" }, // `responseType` indicates the type of data that the server will respond with // options are: 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream' responseType: "json", // default // `xsrfCookieName` is the name of the cookie to use as a value for xsrf token xsrfCookieName: "XSRF-TOKEN", // default // `xsrfHeaderName` is the name of the http header that carries the xsrf token value xsrfHeaderName: "X-XSRF-TOKEN", // default // `onUploadProgress` allows handling of progress events for uploads onUploadProgress: function (progressEvent) { // Do whatever you want with the native progress event }, // `onDownloadProgress` allows handling of progress events for downloads onDownloadProgress: function (progressEvent) { // Do whatever you want with the native progress event }, // `maxContentLength` defines the max size of the http response content in bytes allowed in node.js maxContentLength: 2000, // `validateStatus` defines whether to resolve or reject the promise for a given HTTP response status code. // If `validateStatus` returns `true` (or is set to `null` or `undefined`), the promise will be resolved; // otherwise, the promise will be rejected. validateStatus: function (status) { return status >= 200 && status < 300; // default }, // `maxRedirects` defines the maximum number of redirects to follow in node.js // If set to 0, no redirects will be followed maxRedirects: 5, // default // `httpAgent` and `httpsAgent` define a custom agent to be used when performing http and https requests, respectively // in node.js. This allows options like the following to be configured: // `keepAlive` is not enabled by default httpAgent: new http.Agent({ keepAlive: true }), httpsAgent: new https.Agent({ keepAlive: true }), // `proxy` defines the hostname and port of the proxy server // `auth` indicates that HTTP Basic auth should be used to connect to the proxy, and supplies credentials. // This will set a `Proxy-Authorization` header, overwriting any existing `Proxy-Authorization` // custom headers set in `headers`. proxy: { host: "127.0.0.1", port: 9000, auth: : { username: "mikeymike", password: "rapunz3l" } }, // `cancelToken` specifies a cancel token that can be used to cancel the request // (see Cancellation section below for details) cancelToken: new CancelToken(function (cancel) { })} ### Response Schema The response for an axios request will contain the following information: { // `data` is the response that was provided by the server data: {}, // `status` is the HTTP status code from the server response status: 200, // `statusText` is the HTTP status message from the server response statusText: "OK", // `headers` the headers that the server responded with headers: {}, // `config` is the config that was provided to `axios` for the request config: {}} When using then, you will receive a response like this: axios.get("/user/12345") .then(function(response) { console.log(response.data); console.log(response.status); console.log(response.statusText); console.log(response.headers); console.log(response.config); }); When using `catch`, or passing a (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then) as the second parameter of `then`, the response will be available through the `error` object. ### Config Defaults You can specify config defaults that will be applied to every request. Global axios defaults: axios.defaults.baseURL = 'https://api.example.com'; axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; Custom instance defaults: // Set config defaults when creating the instance var instance = axios.create({ baseURL: 'https://api.example.com'});// Alter defaults after instance has been created instance.defaults.headers.common['Authorization'] = AUTH_TOKEN; ### Config Order of Precedence Config will be merged with the order of precedence. The order is found in the library defaults found in lib/defaults.js, then the instance's defaults property, and finally the config parameter for the request. The latter will take precedence over the former. Here is an example: // Create an instance using the config defaults provided by the library // At this point the timeout config value is `0` as it's the default value var instance = axios.create();// Override the timeout default value for the library // Now all requests will wait 2.5 seconds before timing out instance.defaults.timeout = 2500;// Override timeout for this known request that will take long instance.get('/longRequest', { timeout: 5000}); ### Interceptors Interceptors are used to intercept requests or responses before they are handled by then or catch. // Add a request interceptor axios.interceptors.request.use(function (config) { // Do something before request is sent return config; }, function (error) { // Do something with request error return Promise.reject(error); });// Add a response interceptor axios.interceptors.response.use(function (response) { // Any status code that lie within the range of 2xx cause this function to trigger // Do something with response data return response; }, function (error) { // Any status codes that falls outside the range of 2xx cause this function to trigger // Do something with response error return Promise.reject(error); }); If you want to remove an interceptor later you can do so: var myInterceptor = axios.interceptors.request.use(function () {/*...*/}); axios.interceptors.request.eject(myInterceptor); Interceptors can be added to a custom axios instance. var instance = axios.create(); instance.interceptors.request.use(function () {/*...*/}); Error handling: axios.get('/user/12345') .catch(function (error) { if (error.response) { // The request was made and the server responded with a status code // that falls out of the range of 2xx console.log(error.response.data); console.log(error.response.status); console.log(error.response.headers); } else { // Something happened in setting up the request that triggered an Error console.log('Error', error.message); } console.log(error.config); }); You can define a custom HTTP status code error range using the validateStatus config option. axios.get('/user/12345', { validateStatus: function (status) { return status < 500; // Resolve only if the status code is less than 500 }}) ### Cancellation Cancel requests using a cancel token. Axios's cancel token API is based on the (https://github.com/tc39/proposal-cancelable-promises) You can create a cancel token using the CancelToken.source factory method like this: var CancelToken = axios.CancelToken;var source = CancelToken.source(); axios.get('/user/12345', { cancelToken: source.token }).catch(function(thrown) { if (axios.isCancel(thrown)) { console.log('Request canceled', thrown.message); } else { // Handle error }});// Cancel the request (the message parameter is optional) source.cancel('Operation canceled by the user.'); You can also create a cancel token by passing an executor function to the CancelToken constructor: var CancelToken = axios.CancelToken;var cancel; axios.get('/user/12345', { cancelToken: new CancelToken(function executor(c) { // An executor function receives a cancel function as a parameter cancel = c; })});// Cancel the request cancel(); **Note**: the same cancel token can be used to cancel multiple requests. ### Using application/x-www-form-urlencoded Format By default, axios serializes JavaScript objects to JSON. To send data in the application/x-www-form-urlencoded format instead, you can use the following options. **Browser** In a browser, you can use the URLSearchParams API: const params = new URLSearchParams();params.append('param1', 'value1');params.append('param2', 'value2');axios.post('/foo', params);
← Number PowNumber Min β†’