vue中循环请求接口参数问题及解决

目录
  • vue 循环请求接口参数问题
  • vue for循环请求同一url参数不同但参数覆盖

vue 循环请求接口参数问题

今天遇到一个循环请求问题

先上代码

function(){
      var num = this.eventType.length;
      for (var i = 0; i < num; i++) {
        arr.eventType = this.eventType[i];
        console.log(arr.eventType, i, "arr");
        this.getChart(arr);
        this.getPie(arr);
      }
}
    getChart(arr) {
    //接口请求
    },
    getPie(arr) {
    //接口请求
    },

问题出在eventype上,在接口请求前打印出的eventype都是不一样的,在接口里面打印,每次都是一样的,这导致每次接口的请求参数都是一样,获取的数据也是一样。

搞了半天才找到原因,修改如下

async function(){
      var num = this.eventType.length;
      for (var i = 0; i < num; i++) {
        arr.eventType = this.eventType[i];
        console.log(arr.eventType, i, "arr");
        await this.getChart(arr);
        await this.getPie(arr);
      }
}
    async getChart(arr) {
    await //接口请求
    },
    async getPie(arr) {
    await //接口请求
    },

这下就ok了。

原因在于async是同步请求,每次循环都会执行请求

vue for循环请求同一url参数不同但参数覆盖

今天搞Vue 遇到一个比较怪异的问题,看代码

let self=this
for (let i = 0; i < data.length; i++) {
                let item = data[i]
                item['id'] = i + 1// 赋值序号
                item['similarity'] = parseFloat(item['similarity']).toFixed(2)
                // }
                this.resembleData = data
                // 分次请求轨迹数据
                let targetIdParam = item['targetId']
                self.queryTrajParams['targetId'] = targetIdParam
                self.queryTrajParams['sourceId'] = null
                console.log('targetId参数', targetIdParam)
                console.log('queryTrajParams', self.queryTrajParams)
                axios.get(serviceUrl.trajectoryDataUrl, {
                  params: self.queryTrajParams
                }).then(res => {

....省略

发现network请求的url参数同一个,而且都是最后一个,看来是参数被覆盖了,我是Java出身,碰到这种问题一脸懵逼

是一枚前端小菜鸡,不过我隐约发现是参数的类型原因,然后我试了下基本数据类型,只传number类型,果然能传成功

看来就是对self.queryTrajParams进行一下转换

 let queryParam = JSON.parse(JSON.stringify(self.queryTrajParams))

使用let 对参数进行重定义,let会生成一份临时傀儡代码块,每次都会生成!!

axios.get(serviceUrl.trajectoryDataUrl, {
                  params: queryParam 
                }).then(res => {

然后完美解决问题!!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Vue项目中接口调用的详细讲解

    在企业开发过程中,往往有着明确的前后端的分工,前端负责接收.使用接口,后端负责编写.处理接口. 对于前端如何使用接口,今天在Vue中进行讲解. 一个项目往往由这几个部分组成. 其中在src文件夹中, ,有这么些内容. 我们常常把接口文件,新建一个文件夹在src下,命名为api,api内的文件便是接口文件. 通常把后端的接口写在api文件夹下,自己命名为xxx.js // 登录 export function login(data) { return request({ url: '/api/co

  • 详解vue中使用axios对同一个接口连续请求导致返回数据混乱的问题

    业务上出现一个问题:如果连续对同一个接口发出请求,参数不同,有时候先请求的比后请求的返回数据慢,导致数据顺序混乱,或者数据被覆盖的问题,所以需要控制请求的顺序. 解决方法: 1.直接跟后台沟通,将所有参数放到数组里后台统一接收并返回所有数据再由前端进行数据的拆分使用. 2.对于出现返回的数据混乱问题. 假设场景: 页面中需要对三个部门请求对应的部门人员,三个部门人员的数据为一个二维数组,连续发送请求,但由于返回数据的顺序不定,导致数组中的数据顺序不是按照部门的顺序. 解决方法:使用promise

  • vue如何从接口请求数据

    这两天学习了vue如何从接口请求数据,所以,今天添加一点小笔记. <!doctype html> <html> <head> <meta charset="UTF-8"> <title>获取图片列表</title> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,m

  • Vue 请求传公共参数的操作

    我就废话不多说了,大家还是直接看代码吧~ // An highlighted block //http request拦截器 axios.interceptors.request.use( config =>{ const token = window.sessionStorage.getItem('Tk_token') const user_id=window.sessionStorage.getItem('Tk_user_id') // config.data = JSON.stringif

  • vue中循环请求接口参数问题及解决

    目录 vue 循环请求接口参数问题 vue for循环请求同一url参数不同但参数覆盖 vue 循环请求接口参数问题 今天遇到一个循环请求问题 先上代码 function(){       var num = this.eventType.length;       for (var i = 0; i < num; i++) {         arr.eventType = this.eventType[i];         console.log(arr.eventType, i, "

  • 详解vue中axios请求的封装

    axios Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中, 也是vue官方推荐使用的http库:封装axios,一方面为了以后维护方便,另一方面也可以对请求进行自定义处理 安装 npm i axios 封装 我把axios请求封装在http.js中,重新把get请求,post请求封装了一次 首先,引入axios import axios from 'axios' 设置接口请求前缀 一般我们开发都会有开发.测试.生产环境,前缀需要加以区分,我们利用

  • 浅谈vue中get请求解决传输数据是数组格式的问题

    qs的stringify接收2个参数,第一个参数是需要序列化的对象,第二个参数是转化格式,一般默认格式是给出明确的索引,如:arr[0]=1&arr[1]=2 //indices是index的复数格式,因此indices是索引的意思 //bracket是括号的意思,因此arrayFormat:'brackets'代表数组下标为空[] qs.stringify({ arr: [1,2,3] }, { indices: false }) //arr=1&arr=2&arr=3 qs.s

  • vue中对接Graphql接口的实现示例

    说明: 本文是本人正在搞nestjs+graphql+serverless训练营中对Graphql讲解的基础知识点,可能有点前后没对接上,文中提到的Graphql授权也是下小节介绍的 一.对原来的Express返回Graphql项目修改 本章节使用的代码是express返回Graphql的代码,在使用前要先对代码进行基本的配置,比如处理跨域问题(Graphql本质也是发送一个http请求,既然是这样在vue项目中自然存在跨域的问题,需要先处理) 1.安装跨域的包,并且配置中间件 npm inst

  • vue中post请求以a=a&b=b 的格式写遇到的问题

    vue开发过程中,总会碰到一些问题,当然任何问题都不能阻止我们前进的脚步,话不多说,下面是我在开发过程中请求参数所碰到的问题 1,在暂时没有后台数据的时候,post请求的参数大多会以   name:a,age:b   的格式去写 import axios from 'axios'; axios.post(url,{ name:'0',age:'' },{emulateJSON: true}, { // 这里是跨域写法 headers:{"Content-Type": "app

  • vue中数据请求axios的封装和使用

    目录 一.什么是axios 二.下载方式 三.拦截器 四.请求的封装 五.使用 一.什么是axios 简单的来说,​Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中,我们在项目中会经常用axios请求接口来获取数据. 二.下载方式 直接在当前使用的项目中打开终端: npm install axios --save 或者yarn  add  axios 三.拦截器 拦截器就是在数据请求的过程中,拦截请求或者拦截响应的技术 请求拦截器:就是在发送请求的时

  • Vue中this.$router.push参数获取方法

    传递参数的方法: 1.Params 由于动态路由也是传递params的,所以在 this.$router.push() 方法中path不能和params一起使用,否则params将无效.需要用name来指定页面. 及通过路由配置的name属性访问 在路由配置文件中定义参数: 通过name获取页面,传递params: 在目标页面通过this.$route.params获取参数: 2.Query 页面通过path和query传递参数,该实例中row为某行表格数据 在目标页面通过this.$route

  • 如何在Vue中抽离接口配置文件

    Vue中抽离接口配置文件的问题及解决方法 问题背景 在通常开发中,我们经常把接口配置文件写在src目录里, 虽然有了一些方便,但也引发出一个新的问题,就是每次接都要重新编译. 解决方法 如果是cli2在static文件夹下创建XXX.js文件 如果是cli3在public文件夹下创建XXX.js文件 这两个文件夹下的内容将会原封不动地打包都dist里 在XXX.js下代码,定义全局变量,这样我们便能在任何地方使用 window.$4002API = { URL:'http://baidu.com

  • vue中监听路由参数的变化及方法

    在vue项目中,假使我们在同一个路由下,只是改变路由后面的参数值,期望达到数据的更新. mounted: () =>{ this.id = this.$route.query.id; this.getdetail() } getDetail()方法中会用到this.id这个参数,在同一页面切换id的值,并不会触发vue的声明周期函数. 可以添加路由监听: watch: { $route: { handler() { this.id = this.$route.query.id; this.get

  • postman中POST请求时参数包含参数list设置方式

    如下所示: 图中params包含多个参数,具体如下: {"rzrq":"2019-01-21","rzlx":"1","nr":"","jsonStr":"[{'gzlx':'1','gznr':'11','gzcg':'11','czwt':'11','yjjy':'11','rzgl_id':'','px':1},{'gzlx':'1','gznr':'

随机推荐