Vue 异步请求

vue最初使用vue-resource来实现异步请求(ajax),vue 2.0开始推荐使用 axios 来代替vue-resource。

准备工作

1、使用npm下载axios

npm install axios

2、引入axios.js

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

上线时换为min.js

前端   vue使用axios发起异步请求

可以这样写:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <!-- 引入vue.js -->
        <script src="js/vue.js"></script>
        <!-- 引入axios.js -->
        <script src="js/axios.js"></script>
    </head>
    <body>

    <div id="app"></div>

    <script>

        new Vue({
            el:‘#app‘,
            template:`
                <div>
                    <button @click="login">发送</button>
                </div>
            `,
            data(){
                return{

                }
            },
            methods:{

                  login:function() {
                      axios.post(‘/login‘, {  //get|post可选,用对象{ }传递数据,如果不传递数据,可缺省{ }。get方式参数也可以拼接在url中
                          username: ‘chy‘,   //通常是获取表单数据,$(‘#xxx‘).val
                          password: ‘abcd‘
                      }).then(function (response) {  //处理后台返回的数据。
                          console.log(response);  //response是后台返回的整个响应
                          console.log(response.data);  //.data才是后台返回的数据
                      }).catch(function (error) {  //发生错误时的处理
                          console.log(error);
                      });
                  }

            }

        })

    </script>        

    </body>
</html>
 

如果不需要后台返回数据,可以不要then。catch也不是必需的。

也可以这样写:

    methods:{

          login:function() {
              axios({
                  method:‘post‘,  //请求方式
                  url:‘/login‘,  //后台接口
                  data:{  //传给后台的数据
                      username: ‘chy‘,
                      password: ‘abcde‘
                  }
              }).then(function (response) {
                  console.log(response);  //response是后台返回的整个响应
                  console.log(response.data);  //.data才是后台返回的数据
              }).catch(function (error) {  //发生错误时的处理
                  console.log(error);
              });
          }

    }

这种是不跨域的,如果跨域,url要写  host|ip:port/xxx,写全。

发起异步请求时可以用resultType指定期待返回的数据类型(text、json、stream),可以但是没必要,会自动识别返回的数据类型。

后台   处理ajax请求

@Controller
// @ResponseBody  //@ResponseBody可以写在类上、方法上,写在类上时,对类中所有方法都生效
// @RestController  //@RestController相当于@[email protected]
public class UserController {

    @RequestMapping("/login")
    @ResponseBody  //如果要返回数据给前端,需要用@ResponseBody修饰方法,以json形式返回,不然会被当做视图名
    public String login(@RequestBody Map<String,String> map) {  //如果要接收ajax传来的参数,需要用一个、且只能用一个Map来接收参数,并且要用@RequestBody标注
        String username = map.get("username");  //获取ajax传递的参数
        String password = map.get("password");
        System.out.println(username);
        System.out.println(password);

        return "ok";  //返回给前端的数据。如果不返回数据,返回值类型设置为void即可

    }

}

上面的demo不涉及跨域请求,如果请求要跨域,前端、后台都要做一些其它设置。

后台  返回数据示例

@RestController  //相当于@[email protected]
public class UserController {

    //返回文本|字符串
    @RequestMapping("/login1")
    public String login1() {
        return "hello";
    }

    //返回对象
    @RequestMapping("/login2")
    public User login2() {
        User user = new User("chy", "abcd");
        return user;
    }

    //返回Map。Map和pojo类都是一回事,都是作为json对象返回
    @RequestMapping("/login3")
    public Map<String,Object> login3() {
        HashMap<String, Object> map = new HashMap<>();
        map.put("username", "chy");
        map.put("age", 20);
        return map;
    }

    //返回List,以json数组的形式返回
    @RequestMapping("/login4")
    public List login4() {
        User user1 = new User("chy1", "abcd");
        User user2 = new User("chy2", "abcd");
        User user3 = new User("chy3", "abcd");
        ArrayList<User> userList = new ArrayList<>();
        userList.add(user1);
        userList.add(user2);
        userList.add(user3);
        return userList;
    }

}

前端   取出数据示例

.then(function (response) {
      console.log(response.data);  //取出返回的数据,字符串|对象|Map|List
      // console.log(response.data.username);  //取出对象|Map的某个字段的值
      // console.log(response.data[0]);  //取出List中的某个元素
      // console.log(response.data[0].username);  //取出List中的某个元素的某个字段的值
  })

说明

如果调试时,Chrome控制台报错:  net::ERR_SOCKET_NOT_CONNECTED   ,多刷新几次,或者清除缓存即可。

原文地址:https://www.cnblogs.com/chy18883701161/p/12672051.html

时间: 2024-10-13 10:28:54

Vue 异步请求的相关文章

记一次vue 异步请求微信二进制二维码 乱码 问题解决然后渲染

后端压力大,前端分忧. /*用微信小程序token拿二维码*/ async fetchMINIQRcode({commit,state},params){ var instance = axios.create({ responseType: 'blob', //返回数据的格式,可选值为arraybuffer,blob,document,json,text,stream,默认值为json }) let data = await instance.post('https://api.weixin.

Vue--axios:vue中的ajax异步请求(发送和请求数据)

一.使用axios发送get请求 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta http-equiv=&q

Vue--axios:vue中的ajax异步请求(发送和请求数据)、vue-resource异步请求和跨域

跨域原理: 一.使用axios发送get请求 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta http-eq

09.VUE学习之watch监听属性变化实现类百度搜索栏功能ajax异步请求数据

cmd下安装axios npm install axios 安装好后,会多出node_modules文件夹 思路: 监听data里的word改变时,发送ajax异步请求数据, 把返回的数据赋值给data里的result,再传给模板里 9.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible&qu

vue中异步请求渲染问题(swiper不轮播)(在开发过程中遇到过什么问题)

问题描述: 用vue封装一个swiper组件的时候,发现轮播图不能轮播了. 原因: 异步请求的时间远大于生命周期执行的时间,mounted初始化DOM时数据未返回,渲染数据是空数组,导致轮播图的容器层宽度为0,渲染轮播图不能滚动. 解决思路: 数据返回之后再做初始化操作. 解决方法: 一.容器没有宽度,就想着给容器设置一个宽度,但是一旦设置死数据了后期维护起来很麻烦. 二.设置一个定时器,延长等待的时间,但是无法确定网络请求的时间,这样操作严么会等待时间过长,影响用户体验,要么是还没有请求完就去

黑马eesy_15 Vue:vue语法和生命周期与ajax异步请求

自学Java后端开发,发现14 微服务电商[乐优商城]实战项目,在介绍完SpringCloud后就要肝前端基础知识ES6和Vue. 所以本篇入门Vue练习记录的过程,目的是供自学后端Java遇到Vue使用需求的时候加强一下Vue基本使用的能力. vue语法和生命周期与ajax异步请求 1.Vue的快速入门2.Vue的语法 插值表达式 事件的绑定 数据的显示 逻辑判断和循环输出3.Vue的生命周期 8个生命周期的执行点 4个基本的 4个特殊的4.axios的ajax异步请求 它和jquery的aj

黑马eesy_15 Vue:03.生命周期与ajax异步请求&amp;&amp;04.vue案例

黑马eesy_15 Vue:02.常用语法 vue的生命周期与ajax异步请求 1.Vue的快速入门2.Vue的语法 插值表达式 事件的绑定 数据的显示 逻辑判断和循环输出3.Vue的生命周期 8个生命周期的执行点 4个基本的 4个特殊的4.axios的ajax异步请求 它和jquery的ajax比较相似 5.综合案例    实现用户的查询列表和更新操作        前端:Vue        后端:ssm 3.VueJS生命周期 每个 Vue 实例在被创建之前都要经过一系列的初始化过程. v

vue03----生命周期、nextTick()、ref、filter、computed、vue中异步请求渲染问题(swiper不轮播)(在开发过程中遇到什么问题、踩过的坑)

### 1.vue的组件和实例都有生命周期,而且是一样的 生命周期:(组件从创建到销毁的过程) 创建 挂载 更新 销毁 组件到达某一个阶段就会自动触发某一些函数,这个函数就叫生命周期的钩子函数. 创建:组件创建的时候触发 beforeCreate created     组件刚创建的数据请求 挂载:创建完成挂载前后触发 beforeMount mounted     DOM的初始化操作 更新:数据发生改变的时候触发 beforeUpdate updated     数据的变化监听,尽量不要在这里

学习笔记12JS异步请求

*一般用JS来监听按钮事件,都应该先监听页面OnLoad事件. *Js写在哪里,就会在页面解析到哪里执行. 异步请求:所谓异步请求,就是使用JS来监听按钮点击事件,并且发送请求,等到回复后,再使用JS来进行页面跳转,或动态改变页面.使用场合:当请求是ashx是,都可以使用异步方法,页面就无需刷到ashx的一个空白页面或者不用于展示的页面了. *使用jquery发送异步请求:$("#按钮ID").Click(fuction(){ $.get( "页面URL.ashx"