使用 java 脚本拆分 html 表值



我正在处理rails应用程序,从UI我需要在表中选择大约500个参数(逗号分隔(以执行。我正在 AJAX 调用中发送这些选定的数据。我无法发布巨大的字符串值,因此如果所选参数计数超过 200 长度,我计划获取所选参数的长度。我需要拆分两到三批并发送执行。如何实现?

if (Device1) {
  parameter_name = $('#parameters_object').val();
  var getParams=parameter_name.split(',');
  paramLen=getParams.length;
  alert(paramLen);
  if (paramLen > 200){
  }
  //m is a selected mac address length count
  for (var i = 0; i < m; i++) {
    (function () {
      var macAdd = values[i];
      $.ajax({
          method: "POST",
          url: "get_object",
          dataType: "json",
          data: {
            parameter: getParams,
            mac: macAdd,
            protocol: protocol,
            serialnumber: serialnumber,
          },
          success: function (result) {
            console.log(result);
          }
        },
        statusCode: {
        404: function () {
          console.log("Call failed");
        }
      }
    });
  })();
}

您可以将数组拆分为 200 个项目的块,然后遍历块数组并执行 AJAX 调用。

const chunkSize = 200
const chunkParams = getParams.reduce((resultArray, item, index) => { 
    const chunkIndex = Math.floor(index/chunkSize)
    if(!resultArray[chunkIndex]) {
        resultArray[chunkIndex] = [] // start a new chunk
    }
    resultArray[chunkIndex].push(item)
    return resultArray
}, [])
values.forEach(macAddress => 
    chunkParams.forEach(chunkParam => 
        $.ajax({
           method: "POST",
           url: "get_object",
           dataType: "json",
           data: {
              parameter: chunkParam,
              mac: macAddress,
              ....
           },
           ...
       });
    )
)

您可以直接在reduce循环中执行AJAX调用,性能更高,但可读性较差。

您需要将参数拆分为批处理,并为每个批处理进行 ajax 调用。请尝试以下操作:

if (Device1) {
       parameter_name = $('#parameters_object').val();
       var getParams=parameter_name.split(',');
       paramLen=getParams.length;
        alert(paramLen)
        var paramsBatches = [];
        var batchSize = 200;
        for (i = 0, j = getParams.length; i < j; i += batchSize) {
            paramsBatches.push(getParams.slice(i, i + batchSize));
        }
        //m is a selected mac address length count
        for (var i = 0; i < m; i++) {
            paramsBatches.forEach((batch, index) => {
                var macAdd = values[i];
                $.ajax({
                    method: "POST",
                    url: "get_object",
                    dataType: "json",
                    data: {
                        parameter: batch,
                        mac: macAdd,
                        protocol: protocol,
                        serialnumber: serialnumber,
                    },
                    success: function (result) {
                        console.log(result);
                        }
                    },
                    statusCode: {
                        404: function () {
                            console.log("Call failed");
                        }
                    }
                });
            }
        }
}

最新更新