Разделить значения таблицы HTML с помощью сценария Java - PullRequest
0 голосов
/ 08 февраля 2019

Я работаю в приложении rails, и из пользовательского интерфейса мне нужно выбрать около 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");
        }
      }
    });

  })();

}

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Вам нужно разделить параметры на пакеты и сделать вызов 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");
                        }
                    }
                });
            }

        }

}
0 голосов
/ 08 февраля 2019

Вы можете разбить свой массив на порции по 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,
              ....
           },
           ...
       });
    )
)

Вы можете напрямую выполнить вызов AJAX в цикле сокращения, более производительныйно менее читабельный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...