关键是setInterval无法传递参数,所以用了匿名函数再包裹一下就好了。

//重置发布进度
    function resetPercent(id_data){
        $.ajax({
              url:'/autodeploy/reset_percent/' + id_data,
              success: function(json){
                },
            });
    };
    //间隔刷新,显示百分比,AJAX调用rest_framework框架
    var _interval = {};

    function showPercent(id_data){
        //var _interval;
        var percent_value;
        var id_subserver = id_data.split("-")[0]

        $.getJSON("/api/subserver/" + id_subserver,
            function(data,state){
                if (state == 'success') {
                    percent_value_array = data.deploy_status.split(",");
                    percent_value = percent_value_array[0];
                    cmd_value = percent_value_array[1];
                    $('#' + id_data).html("<div class='uk-progress uk-progress-striped uk-progress-active'><div class='uk-progress-bar' style='width: " + percent_value + "%;'>" +  cmd_value + ' ' + percent_value + "%</div><i class='uk-icon-cog uk-icon-spin'></i></div>");
                     console.log(percent_value[0])
                        if ( percent_value != 100 ){
                            //_interval = setInterval(showPercent(id_data), 3000);
                        } else {
                             clearInterval(_interval[id_data]);
                             $('#' + id_data).html("<div class='uk-progress uk-progress-striped uk-progress-success'><div class='uk-progress-bar' style='width: " + percent_value + "%;'>100%</div></div>");
                        };

                    };
            }
        );
    };

    $(".btn-multi-deploy").click(function(){
          var deploypool_id =  $(this).attr("deploypool_id")
          var group_data = $("#deploy-form" + deploypool_id).serialize()
          var deploy_type = $(this).attr("deploy_type")
          var _self = this;

          console.log(deploypool_id, group_data)

          //因为涉及到模态对话态中的AJAX输出ID定位,所以用了两个数组来重置更新进度和刷新百分比。可以优化。
          var id_array = []
          var id_s_array = []
          var group_array = group_data.split("&");
          for (var key_data in group_array) {
            if (group_array[key_data].indexOf("select-deployversion") != -1) {
                deploy_id = group_array[key_data].split("=")[1]
            };
            if (group_array[key_data].indexOf("check-server") != -1) {
                id_s_array.push(group_array[key_data].split("=")[1])
                id_array.push(group_array[key_data].split("=")[1] + "-" +deploy_id)

            };
          };

          promiseDEPLOY = $.ajax({
            url:'{% url "autodeploy:group-cmd" %}',
            type: 'post',
            data:{
                group_data: group_data,
                deploy_type: deploy_type,
            },
            dataType: 'json',
            beforeSend: function(){
                result_output = $(_self).siblings("p.result_output");
                result_output_desc = $(_self).siblings("p.result_output_desc");
                $(_self).attr('disabled',"true");
                $(_self).append(" <i class='uk-icon-cog uk-icon-spin'></i>");
                result_output_desc.append(" <strong>集群发布中,请耐心等候....</strong>");
                // result_output.html("<div >集群发布中,请耐心等候....</div>");
                //发送前重置
        for( index=0;index < id_s_array.length;index++){
                    resetPercent(id_s_array[index]);
                }
            },
            success: function(json){
                $(_self).children('i').remove();
                $(_self).append(" <i class='uk-icon-check'></i>")
                result_output_desc.append("<span class='uk-text-success'><i class='uk-icon-check'></i></span>");
                result_output_desc.append("<span class='uk-text-success'>异步队列分发完成,每个服务器开始更新。</span>");
                //发送后获取进度

         for( index=0;index < id_array.length;index++){
            var key = id_array[index];
                    //_interval = setInterval(function(){showPercent(key)}, 3000);
            _interval[key] = setInterval(function(){showPercent(key);}, 3000);
                }
        },
            error: function(){
                result_output_desc.append("<span class='uk-text-muted'><br>服务器内部错误 </span>");
                result_output_desc.append("<span class='uk-text-danger'><i class='uk-icon-remove'></i></span>");
                $(_self).children('i').remove();
                result_output.html("<div ></div>");
            },
            complete: function(){
            }
        });/* end cmd-run stop */
    });

上次的AJAX定时刷新多ID不正确,这次请教了高手之后补全的更多相关文章

  1. jQuery实现AJAX定时刷新局部页面实例

    本篇文章通过两种方法实例讲解ajax定时刷新局部页面,当然方法有很多种,也可以不使用ajax来刷新页面,可以使用jquery中的append来给指定内容加东西,但是都不太实用,最实用的方法还是ajax ...

  2. 【jQuery】: 定时刷新页面

    <%@page import="qflag.ucstar.seatmonitor.manager.SeatMonitorManager"%><%@ page la ...

  3. 使用ajax+php+mysql实现数据库定时刷新

    php版本5.5.9,mysql版本5.7. 所以php链接mysql就是使用mysql_connect. 如果遇到了连接时没有成功也没有失败的情况时,就重启mysql,或重启docker(睡一觉就好 ...

  4. Ajax定时局部刷新

    1.局部刷新一个地方 function refreshOnTime(){ $.ajax({ //配置 }); //7秒后重复执行该函数 setInterval('refreshOnTime', 700 ...

  5. js中对arry数组的各种操作小结 瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据 web前端url传递值 js加密解密 HTML中让表单input等文本框为只读不可编辑的方法 js监听用户的键盘敲击事件,兼容各大主流浏览器 HTML特殊字符

    js中对arry数组的各种操作小结   最近工作比较轻松,于是就花时间从头到尾的对js进行了详细的学习和复习,在看书的过程中,发现自己平时在做项目的过程中有很多地方想得不过全面,写的不够合理,所以说啊 ...

  6. Ajax回退刷新页面问题的解决办法

    在脚本之家看到一篇文章,觉得以后可能会用上,但是竟然不能收藏,所以只能将其转到博客园. 以下是原文地址: http://www.jb51.net/article/87856.htm   这篇文章主要介 ...

  7. 移动端图片上传解决方案localResizeIMG先压缩后ajax无刷新上传

    现在科技太发达,移动设备像素越来越高,随便一张照片2M+,但是要做移动端图片上传和pc上略有不同,移动端你不能去限制图片大小,让用户先处理图片再上传,这样不现实.所以理解的解决方案就是在上传先进行图片 ...

  8. Ajax无刷新提交

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. thinkphp ajax 无刷新分页效果的实现

    思路:先做出传统分页效果,然后重新复制一份Page.class.php类,对它进行修改,把js中的函数传到page类中,把上一页.下一页.首页.尾页.链接页中的url地址改成js控制的函数,模板页面中 ...

随机推荐

  1. [记录]使用setTimeout实现不同时间进行切换文本的颜色

    开始使用的是setinterval(),但是setinterval()的time是固定的,假如我想改变time,就需要每次clearInterval()一次. 如: setInterval(funct ...

  2. 汉诺塔的问题:4个柱子,如果塔的个数变位a,b,c,d四个,现要将n个圆盘从a全部移到d,移动规则不变

    四柱汉诺塔问题的求解程序.解题思路:如a,b,c,d四柱. 要把a柱第n个盘移到目标柱子(d柱),先把上层 分两为两部份,上半部份移到b柱,下半部分移到c柱,再把第n盘移到 目标柱子,然后,c柱盘子再 ...

  3. linux时间自动同步

    1,修正本地时区及ntp服务 #yum -y install ntp#rm -rf /etc/localtime#ln -s /usr/share/zoneinfo/Asia/Shanghai /et ...

  4. oracle中存储过程的使用

    存储过程 刚开始我接触到数据库的时候,感觉存储过程是很难的,但是当你看完我给你列举的例子,你就能够轻松的掌握存储过程的创建和使用了. 存储过程是在大型数据库系统中存储过程在数据库中经过第一次编译后就不 ...

  5. ###再探Makefile

    使用makefile.以前刚开始接触Makefile的时候,写过一个最简单的Makefile.点击查看Evernote原文. #@author: gr #@date: 2014-07-20 #@ema ...

  6. someExperience

    // 面试题1 var name = 'World'; (function () { if (typeof name==='undefined') { var name = 'jack'; conso ...

  7. CSS3的几个标签速记3

    transition:CSS3过渡     css3里很好的一个标签,可以非常方便的完成需要很多JS才能完成的动态效果 例语法:transition:width 2S,height 2S,transf ...

  8. 【制作镜像Win*】系统安装

    图形化安装系统,在询问“进行何种类型的安装?”时,选择“自定义(高级)” 下一步看不到硬盘,如图: 选择“加载驱动程序”,安装驱动. 将相应版本的netkvm.inf和viostor.inf装上. 继 ...

  9. 第32条:用EnumSet代替位域

    如果一个枚举类型的元素主要用在集合中,一般使用int枚举模式,将2的不同倍数赋予每个常量: public class Text { public static final int STYLE_BOLD ...

  10. WinForm应用程序退出的方法

    this.Close(); 只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出. Application.Exit(); 强制所有消息中止,退出所有的 ...