先看一个场景

var arr = ["a","b","c"];
for (var i in arr) {
        $.get("h.html", function (data) {//1
            console.log(data);
            console.log(arr[i]);
            console.log("----");
        });
}
 
我们期望的是

然而实际上是

如何达到实际目的呢?先给出解决方法,再慢慢解释

使用闭包,或者简单说,使用函数,根据作用域,控制好返回回调函数中数据的值

var arr = ["a","b","c"];
    var b = 1000000000;
    for (var i in arr) {
        get(arr[i]);//使用闭包,使得每次请求返回某些想要的数据
    }
    function get(retur) {
        $.get("h.html", function (data) {//2
            console.log("func:"+data);
            console.log("func:"+retur);
            console.log("func:----");
        });
    }
 
下面是详细解释
首先清楚一点,异步请求理论上是在正常的js代码执行完毕之后才发送,所以不难理解为什么上述一直返回的是c,因为代码都循环结束了,才一起发送的请求
然后我简单的画了两张图,便于理解

js:如何在循环异步请求的每次返回中添加想要的值的更多相关文章

  1. 前端总结·基础篇·JS(四)异步请求及跨域方案

    前端总结系列 前端总结·基础篇·CSS(一)布局 前端总结·基础篇·CSS(二)视觉 前端总结·基础篇·CSS(三)补充 前端总结·基础篇·JS(一)原型.原型链.构造函数和字符串(String) 前 ...

  2. javascript for循环+异步请求导致请求顺序不一致

    工作中遇到一个问题 for循环,再把循环出来的ID再进行二次请求 这就导致一个问题 请求结果返回顺序不一致 原因:异步请求会把回调事件放入微任务事件队列,宏任务执行完毕再执行微任务,具体参考事件队列机 ...

  3. JS原生对象实现异步请求以及JQ的ajax请求四种方式

    一.JS原生方式异步请求 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="A ...

  4. javaweb局部刷新-ajax异步请求springMVC显示返回的jsp内容,代替iframe

    在jsp上要引入jquery <script src="<%=request.getContextPath()%>/js/jquery_ui/jquery.js" ...

  5. js 向数组对象中添加属性和属性值

    let resultList = [{"name":"a1"},{"name":"b1"}] resultList.fo ...

  6. 关于ajax请求,在参数中添加时间戳的必要性

    之前做项目的时候,看到别人的前端ajax请求代码中,都会带有一个时间戳类型的参数,当时随便查了一下,是为了防止浏览器缓存的原因,所以也没有进行深究,每次写的时候也习惯性的带一个,最近新项目中,我发现好 ...

  7. php curl请求。header头中添加请求信息

    function get_data($key,$authorization,$url){ $headers = array(    'api-key:'.$key,    'authorization ...

  8. swagger请求参数在header中添加token

    网友大部分说的是如下配置 参照配置然而没有作用 注掉改红框内的配置,在方法上加如下注释就可以用 @ApiImplicitParams({ @ApiImplicitParam(paramType = & ...

  9. uni-app如何解决在for循环里调用异步请求获取数据顺序混乱问题?

    总结/朱季谦 先前有一次做uni-app的js接口对接时,遇到过这样的情况,在for循环里,调用一个异步请求时,返回来的值顺序是乱的,因此,在以下的代码里,push到数组里的值,每次的顺序可能都是不一 ...

随机推荐

  1. winform - json串的转换

    通过java接口,或者查询数据库返回json串. 可以有两种方式进行解读. 1.简单方式 没有深层结构,最好只有一条数据(当然也可多条).可以用datatable来获取.返回的是clo0.clo1.c ...

  2. 笔记整理--socket_server

    epoll精髓 - 彭帅 - 博客园 - Google Chrome (2013/10/11 20:47:52) epoll精髓 在linux的网络编程中,很长的时间都在使用select来做事件触发. ...

  3. 用while判读循环语句1+1/2!+1/3!+...1/20!的和阶乘的计算方法 式:n!=n*(n-1)!

    package com.chongrui.test; /* *用while判读循环语句1+1/2!+1/3!+...1/20!的和 *使用BigDecimal类完成大数字与高精度运算 公式:n!=n* ...

  4. iOS 之 支付

    现在广泛应用的是微信支付和支付宝支付,这两种应该覆盖了几乎所有网上消费的用户,所以我们就用这两种支付方式就够了.2014年用过支付宝的网民购物占比有94%. 1. iOS 之 微信支付 2. iOS ...

  5. Grunt构建工具能做哪些事?

    Grunt到底有什么作用?一般用来干嘛? 很多前端的工作,包括Less编译.javascript压缩.Css压缩等零零碎碎的工作, 都可以让Grunt来做. 实际上在项目开发中,一般是前端代码 与 后 ...

  6. 如何迅速成为Java高手

    很多网友朋友问我学习Java有没有什么捷径,我说“没有,绝对没有!”.但是我却很愿意将自己学习的一些经验写出来,以便后来者少走弯路,帮助别人是最大的快乐嘛!         要想学好Java,首先要知 ...

  7. 3.3. 轻量级的迁移方式(Core Data 应用程序实践指南)

    持久化存储协调器会试着用新版的模板打开原来的持久化存储区,但是那是旧的模板,旧的格式,当然会出错.现在要做的就是迁移现有的持久化数据区,以便跟新模型匹配. 怎么进行迁移呢? 在什么时候进行迁移? 在向 ...

  8. js dorado

    1.dorado http://bsdn.org/projects/dorado7/deploy/sample-center/com.bstek.dorado.sample.Main.d#40350

  9. Cracking the code interview

    推荐一本书<Cracking the code interview> Now in the 5th edition, Cracking the Coding Interview gives ...

  10. bootstrap 树

    http://jsfiddle.net/jhfrench/GpdgF/ 把原文的i标签中的图标显示出来: 源码: <div class="tree well"> < ...