循环ajax请求问题

项目开发过程碰到过这种需求:需要循环发送ajax请求,请求参数和循环索引有关。
第一次实现的时候用了类似下面的方法,结果发现发送到后端的参数数据都是最后一次循环的索引

1 for(var i=0; i<10; i++){
2     $.get(url,{param:i},function(){});
3 }

这是js没有块级作用域引起的,for循环中代码块使用的i实际上是同一个,都是最后一次的索引值。
js存在函数作用域,所以可以利用js闭包特性,让for循环中每次请求使用索引值不同。实现代码:

1 for(var i=0; i<10; i++){
2     (function(seq){
3         $.get(url,{param:seq},function(){});
4     })(i);
5 }

这是因为在函数作用域中,内部函数可以访问定义它们的外部函数的参数和变量,并且内部函数比外部函数有更长的生命周期;上面的例子中,$.get()属于内部函数,function(seq){}属于外部函数,内部函数可以直接使用外部函数的参数seq。由于外部函数是立即执行函数,外部函数执行后,会为内部函数创建一个上下文环境,外部函数的参数seq也属于这个上下文环境中的一部分,这个上下文环境存在于内部函数的生命周期中。基于这样的事实,在一次循环中,外部函数执行结束,外部函数的生命周期结束,但是外部函数为内部函数创建的上下文环境仍然有效。因为传参不同,外部函数每次执行创建的上下文环境都不同。对内部函数而言,执行使用的参数seq存在上下文环境中,对于不同的上下文环境,使用的seq值不同。个人理解

时间: 2024-08-22 09:28:18

循环ajax请求问题的相关文章

点滴笔记(一):for循环ajax请求添加数据

项目里遇到循环添加数据,添加多条数据到主表后,还要根据每条主表数据主键ID添加到子表里,于是想到post提交 发现循环post没效果,也没async参数.. 于是用ajax里面有async设置了false,循环添加也没达到效果.. 一开始的写法 for(int a=0;a<10;a++) { $.ajax({                 url: "url",                 dataType: 'json',     async:false         

Ajax请求php返回json对象数据中包含有数字索引和字符串索引,在for in循环中取出数据的顺序问题

//php中的数组数据格式 Array ( [all] => Array ( [title] => ALL [room_promotion_id] => all ) [best_available_rate] => Array ( [title] => Best Available Rate [room_promotion_id] => best_available_rate ) [30] => Array ( [room_promotion_id] =>

循环多次ajax请求

最近在做网页前端,其中有个功能按钮是从数据表格中同时删除多条数据,涉及到循环多次ajax请求 但是老是出现一些请求被忽视的情况,应该是由于for循环在极短时间内被完成,所以第一次请求后的几次请求时,xmlhttprequest对象正在请求当中,就无法响应请求. 最后试验多次,决定每次循环都声名一个xmlhttprequest对象,这样就可以同时请求. 虽然成功了,但总觉得这样做不太好,也没想出其他方法~~

自动化运维Python系列之Django路由系统、Ajax请求

路由系统 路由系统负责分析处理用户请求网址内容,向后视图函数分发处理任务,根据对应的处理函数处理完成后给用户return模板渲染结果:路由系统分类很多,常见的有基本单一路由,正则路由,带额外参数路由,二层三层路由还有通过反射机制来完成的动态路由. 1)单一路由 url(r'^admin/', admin.site.urls) 2)基于正则的路由 url(r'^detail/(\d+)/', views.detail), url(r'^detail2/(?P<p1>\d+)/(?P<x2&

ajax请求返回数据,模板中的数据处理

/*ajax请求返回数据,模板中的数据处理*/ function QueryGameAsset(){ var new_start_time=$('#new_start_time').val();//开始时间 var new_end_time=$('#new_end_time').val();//结束时间 if(!new_start_time||!new_end_time){ alert("时间不能为空"); return false; } $.ajax({ url:'/Statisti

AngularJs中POST和GET方式的ajax请求

angular中ajax请求的方法说明: /* * _http:angularJs中的$http对象 * _url:ajax请求的URL * _method:请求方式:POST或GET * _params:GET方式请求时传递的参数 * _data:POST方式请求时传递的参数 * _responseType:在请求中设置XMLHttpRequestResponseType属性,""(字符串,默认), * "arraybuffer"(ArrayBuffer);&qu

使用原生JavaScript发送ajax请求

关于使用原生JavaScript发送异步请求给服务端. 准备工作: 代码编写工具用的是sublime 服务端使用的是wamp搭的一个本地Apache服务器,主要用来返回数据 方便测试 步骤: 浏览器端 html标签绑定事件发送ajax请求----> 五步操作:1 创建异步对象XMLHttpRequest; 2 设置method url 3 发送请求给服务端 4 注册事件   5 在事件中获取服务端返回的数据,进行操作. 服务器端 1 获取请求数据 2 返回结果给浏览器 下面来一个小demo1做一

Ajax请求汇总(一)

刚开始结束Ajax请求的时候,那真的是迷迷糊糊,昏天暗地,通过学习的深入和翻阅各种资料.求助度娘,总结一下Ajax请求,与大家分享一下,希望能给学习Ajax的同学一些帮助,废话不多手,直接开始~~~ 一.Ajax请求的原理 1.原理:在Ajax请求中,html页面的中操作将通过Ajax引擎与服务器端进行通讯,然后将返回的结果提交到客户端页面的Ajax引擎,再由Ajax引擎来决定将服务器端返回数据插入到页面的指定位置.从而实现无需刷新页面的http请求. 看图: 2.Ajax请求的优点 a.当然最

jQuery Ajax请求(关于火狐下SyntaxError: missing ] after element list ajax返回json,var json = eval(&quot;(&quot;+data+&quot;)&quot;); 报错)

$.ajax({ contentType: "application/x-www-form-urlencoded;charset=UTF-8" , type: "POST", url:url, dataType: 'json', data:{}, success: function(data){ } }); 如果后台返回的是一个string类型的json串,则谷歌和IE下将它解析成string类型,而火狐下则会显示成[object xmlDocument],是一个o