Javascript循环跳过迭代

时间:2017-10-17 14:51:54

标签: javascript

我正在使用一个javascript函数,该函数从HTML表中获取所有id并发送循环的每次迭代并将信息发送到PLSQL过程进行更新。我在每个id上都有一个数字,以使每个id都是唯一的。如果我在循环中添加一个警报并逐个点击它就可以了。如果我让它自己走,没有任何警报,它会跳过一些迭代。有什么我做错了吗?



function process_update() {
  var nDataCount = document.getElementById("v_nDataCount").value;
  var p_cc_no = document.getElementById("p_cc_no").value;
  var p_orient = document.getElementById("p_orient").value;
  var p_ot = document.getElementById("p_ot").value;
  var p_buy = document.getElementById("p_buy").value;
  var x = 0;

  if (nDataCount == 0) {
    x = 0;
  } else {
    x = 1;
  }

  for (i = nDataCount; i >= x; i--) {
    var p_pc_no = ("p_pc_no[" + i + "]");
    var p_pc_no2 = document.getElementById(p_pc_no).value;

    var p_tm_name = ("p_tm_name[" + i + "]");
    var p_tm_name2 = document.getElementById(p_tm_name).value;

    var p_tm_no = ("p_tm_no[" + i + "]");
    var p_tm_no2 = document.getElementById("p_tm_no").value;

    var p_status = ("p_status[" + i + "]");
    var p_status2 = document.getElementById(p_status).value;

    var p_hrs_per_week = ("p_hrs_per_week[" + i + "]");
    var p_hrs_per_week2 = document.getElementById(p_hrs_per_week).value;

    var p_shift = ("p_shift[" + i + "]");
    var p_shift2 = document.getElementById(p_shift).value;

    var p_open = ("p_open[" + i + "]");
    var p_open2 = document.getElementById(p_open).value;

    var p_vacant = ("p_vacant[" + i + "]");
    var p_vacant2 = document.getElementById(p_vacant).value;

    var p_comments = ("p_comments[" + i + "]");
    var p_comments2 = document.getElementById(p_comments).value;

    var p_delete = ("p_delete[" + i + "]");
    var p_delete2 = document.getElementById(p_delete).value;

    window.location.href = "https://server.server.com/db/schema.package.p_process2?p_cc_no=" + p_cc_no + "&p_pc_no=" + p_pc_no2 + "&p_tm_name=" + p_tm_name2 + "&p_tm_no=" + p_tm_no2 + "&p_status=" + p_status2 + "&p_hrs_per_week=" + p_hrs_per_week2 + "&p_shift=" + p_shift2 + "&p_open=" + p_open2 + "&p_vacant=" + p_vacant2 + "&p_comments=" + p_comments2 + "&p_delete=" + p_delete2 + "&p_orient=" + p_orient + "&p_ot=" + p_ot + "&p_buy=" + p_buy + "";
  }




1 个答案:

答案 0 :(得分:0)

尝试以下代码。我在循环中使用请求参数的AJAX GET请求,以便尽可能不更改接口。它只使用普通JS,因为我不确定你是否有jquery。

实际更改从第48行开始。当然,我只能以有限的方式测试此代码,因此可能存在错误(请告诉我)。此外,这可能会进一步细化,但作为一个快速解决方案,它应该做。

提醒一句:这可以快速连续拨打很多电话。因此,如果您有太多的循环迭代,您最终可能会关闭服务器。明智地使用! :-)应该有某种批处理来避免这种情况,但是需要更改调用接口。

第48-61行:我在所有参数中创建了一个普通的JS对象。关键是参数名称,value是要传递的值。

第63行:这里我定义了一个自调用函数,它在其体内进行AJAX调用。这样,即使AJAX本质上是异步的,它也会与外部的for循环同步运行。

第64-66行:我将循环中创建的对象序列化为查询参数。

第68,69行:构建将要进行请求的URL。

第71-77行:实际提出请求。这只是你可以在任何地方找到的样板AJAX调用代码(jQuery会让生活变得如此简单: - ))。

function process_update(){

  var nDataCount = document.getElementById("v_nDataCount").value;
  var p_cc_no = document.getElementById("p_cc_no").value;
  var p_orient = document.getElementById("p_orient").value;
  var p_ot = document.getElementById("p_ot").value;
  var p_buy = document.getElementById("p_buy").value;
  var x = 0;


  if (nDataCount == 0) {
    x = 0;
  } else {
    x = 1;
  }

  for (i = nDataCount; i >= x; i--) {
    var p_pc_no = ("p_pc_no[" + i + "]");
    var p_pc_no2 = document.getElementById(p_pc_no).value;

    var p_tm_name = ("p_tm_name[" + i + "]");
    var p_tm_name2 = document.getElementById(p_tm_name).value;

    var p_tm_no = ("p_tm_no[" + i + "]");
    var p_tm_no2 = document.getElementById("p_tm_no").value;

    var p_status = ("p_status[" + i + "]");
    var p_status2 = document.getElementById(p_status).value;

    var p_hrs_per_week = ("p_hrs_per_week[" + i + "]");
    var p_hrs_per_week2 = document.getElementById(p_hrs_per_week).value;

    var p_shift = ("p_shift[" + i + "]");
    var p_shift2 = document.getElementById(p_shift).value;

    var p_open = ("p_open[" + i + "]");
    var p_open2 = document.getElementById(p_open).value;

    var p_vacant = ("p_vacant[" + i + "]");
    var p_vacant2 = document.getElementById(p_vacant).value;

    var p_comments = ("p_comments[" + i + "]");
    var p_comments2 = document.getElementById(p_comments).value;

    var p_delete = ("p_delete[" + i + "]");
    var p_delete2 = document.getElementById(p_delete).value;

    var dataObj = {p_cc_no:p_cc_no,
            p_pc_no:p_pc_no2,
            p_tm_name:p_tm_name2,
            p_tm_no:p_tm_no2,
            p_status:p_status2,
            p_hrs_per_week:p_hrs_per_week2,
            p_shift:p_shift2,
            p_open:p_open2,
            p_vacant:p_vacant2,
            p_comments:p_comments2,
            p_delete:p_delete2,
            p_orient:p_orient,
            p_ot:p_ot,
            p_buy:p_buy};

    (function(paramsObj){
        var paramsStr = Object.keys(paramsObj).map(function(key) {
            return key + '=' + paramsObj[key];
        }).join('&');

        var url = "https://server.server.com/db/schema.package.p_process2?";
        url += paramsStr;

        var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
        xhr.open('GET', url);
        xhr.onreadystatechange = function() {
            if (xhr.readyState>3 && xhr.status==200) {/*Handle Call Success*/};
        };
        xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
        xhr.send();

    })(dataObj);
    }

}