Vue-asynchronous request

What is asynchronous request (AJAX)?
Asynchronous is the abbreviation of (Asnychronous Javascript and XML), which means that after a thread initiates a request, it performs other tasks in the idle waiting time, and notifies the thread to process subsequent results again after the request is completed.
Synchronization is that a thread must wait for the completion of the previous request before performing subsequent operations.

What are the ways of asynchronous request?

  • Native js way to create XMLHttpRequest object
  • jQuery
  • Axios
  • Fetch

What is Axios and its features?

Chinese official website: http://www.axios-js.com/zh-cn/docs/

axios is a Promise-based HTTP client for browsers and nodejs. It is essentially a encapsulation of native XHR, except that it is an implementation version of Promise and conforms to the latest ES6 specifications.

Features:

  • Create XMLHttpRequests from the browser
  • Create http request from node.js
  • Support Promise API
  • Intercept request and response
  • Convert request data and response data
  • Cancel request
  • Automatically convert JSON data
  • The client supports defense against XSRF

Development steps using Axios asynchronous framework
Ordinary vue projects use script tags to introduce axios.js

<script src="js/axios.js"></script>

Call asynchronous method

<body>
    <div id="app">
        <button @click="getData()">发送请求</button>
        <p>{
   
   {name}}</p>			
    </div>
</body>
<script>
    var vm = new Vue({
     
     
        el:"#app",
        data:{
     
     
            name:''
        },
        methods:{
     
     
            getData(){
     
     
                // 解决axios中的this问题
                var _this = this;

                // 使用axios发送异步请求
                axios.get("data/user.json",{
     
     
                    // 设置参数
                    params: {
     
     
                        id: 12345
                    }
                })
                // 接收响应的数据
                    .then(function(resp){
     
     
                    _this.name = resp.data.name;
                    console.log(resp.data);
                })
                // 异常的处理
                    .catch(function(error){
     
     
                    console.log("error:"+error)
                })
            }
        }
    })
</script>

Problems encountered by axios?
This reference problem in vue

// 解决axios中的this问题
var _this = this;
					
// 使用axios发送异步请求
axios.get("data/user.json",{
    // 设置参数
    params: {
        id: 12345
    }
})

Front-end separation and cross-domain issues
Insert picture description here
Back-end controller layer:
@CrossOrigin: acting on the class

@RestController
@CrossOrigin
public class UserController {

    @GetMapping("/user/{id}")
    public User getUser(@PathVariable("id")  int id){
        User user = new User();
        user.setUid(1);
        user.setUsername("张三");
        user.setPassword("123");
        user.setCreateTime(DateUtil.toSqlDate(new Date()));

        return user;
    }
}

Back-end global mode

@Configuration
public class AppConfig {

 // 全局跨域配置: 可以在java后台配置,也可以在vue前台配置
    private CorsConfiguration addCorsConfig() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        //请求常用的三种配置,*代表允许所有,当时你也可以自定义属性(比如header只能带什么,只能是post方式等等)
        corsConfiguration.addAllowedOrigin("*");
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedMethod("*");
        return corsConfiguration;
    }

    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", addCorsConfig());
        return new CorsFilter(source);
    }
}

axios request alias

axios.request(config)
axios.get(url[, config])
axios.delete(url[, config])
axios.head(url[, config])
axios.options(url[, config])
axios.post(url[, data[, config]])
axios.put(url[, data[, config]])
axios.patch(url[, data[, config]])

Vue-axios combined with
common projects to
create an axios instance

 const $http = axios.create({
        baseURL:'http://localhost'
    })

Set global properties

 Vue.prototype.$axios = $http;

transfer

this.$axios
    .get(api) // 发送请求
    .then() // 回调函数
    .catch() // 异常回调

Combine
in the Vue-CLI project Install in the project:

npm install --save axios vue-axios

Configure axios

import Vue from ‘vue’
import axios from ‘axios’
import VueAxios from ‘vue-axios’
Vue.use(VueAxios, axios)

Use axios

 Vue.axios.get(api).then((response) => {
     console.log(response.data)
   })
   
   this.axios.get(api).then((response) => {
     console.log(response.data)
   })
   
   this.$http.get(api).then((response) => {
     console.log(response.data)
   })

Guess you like

Origin blog.csdn.net/qq_36008278/article/details/114828102