я хочу разделить функцию на несколько функций jquery / ajax - PullRequest
0 голосов
/ 25 октября 2019

У меня есть файл JavaScript, в котором есть функция Ajax, которая вызывает JSON-файл с онлайн-сервера для извлечения его данных и их интерпретации в сгенерированную таблицу ... Я хочу отделить ссылку для генерации, дату для генерации, определитьавтомобильная табличка типа / страны на несколько функций, которые могут быть вызваны функцией ajax.

//  table of the server's data from JSON file
$(document).ready(function() {
  $.ajax({
    url: "http://127.0.0.1:3737/anpr?nb=0",
    type: "GET",
    dataType: "json",
    success: function(data) {
      var detection_data = '';
      // generating the table to interpret the json data 
      $.each(data, function(key, value) {
        detection_data += '<div class="table-row">';
        detection_data += '<div class="serial">' + value.id + '</div>';
        // identifie the car plate type/country fron json data
        var plateType = value.plateType
        if (plateType == "1") {
          detection_data += '<div class="country">Tunisie TN</div>';
        } else if (plateType == "2") {
          detection_data += '<div class="country">Tunisie RS</div>';
        } else if (plateType == "3") {
          detection_data += '<div class="country">Tunisie GOV</div>';
        } else if (plateType == "4") {
          detection_data += '<div class="country">Lybie</div>';
        } else if (plateType == "5") {
          detection_data += '<div class="country">Algerie</div>';
        } else {
          detection_data += '<div class="country">Autre</div>';
        }
        detection_data += '<div class="visit">' + value.plateNumber + '</div>';
        // generate date from json data
        detection_data += '<div class="percentage">' + value.date.substr(8, 2) +
          '/' + value.date.substr(5, 2) + '/' + value.date.substr(0, 4) +
          '  ' + value.date.substr(11, 2) + ':' + value.date.substr(14, 2) + ':' + value.date.substr(17, 2) + '</div>';
        // generate link 
        detection_data += '<div>' + '<a class="img-pop-up" href="http://127.0.0.1:3737/anpr/snapshot?year=' + value.date.substr(0, 4) +
          '&month=' + value.date.substr(5, 2) + '&day=' + value.date.substr(8, 2) +
          '&&hour=' + value.date.substr(11, 2) + '&minute=' + value.date.substr(14, 2) + '&second=' + value.date.substr(17, 2) +
          '&plate=' + value.plateNumber.split(" ").join("_") + '&platetype=' + value.plateType + '">link to picture</a>' + '</div>';
        detection_data += '</div>';
      });
      $('#detection_table').append(detection_data);

    }
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

1 Ответ

0 голосов
/ 25 октября 2019

Я пытался сделать ваш код более модульным и читабельным. Вот что я мог придумать. Я публикую только соответствующие разделы вашего кода, чтобы быть кратким.

ПРИМЕЧАНИЕ. Это только рекомендация, я не проверял приведенный ниже код.

      var detection_data = '';
      // generating the table to interpret the json data 
      $.each(data, function(key, value) {
        detection_data += '<div class="table-row">';
        detection_data += getPlateIDHTML(value.id);
        // identifie the car plate type/country fron json data
        detection_data += getPlateTypeCountryHTML(value.plateType);
        // Plate number
        detection_data += getPlateNumberHTML(value.plateNumber);
        // generate date from json data
        detection_data += getDetectionDateHtml(value.date);
        // generate link 
        detection_data += getSnapshotLink(value.date, value.plateNumber, value.plateType);
        detection_data += '</div>';
      });
      $('#detection_table').append(detection_data);

Ниже приведены мои функции

  String.prototype.format = function () {
    var a = this, b;
    for (b in arguments) {
        a = a.replace(/%[a-z]/, arguments[b]);
    }
    return a; // Make chainable
};

function parseStringAsJSDate(date_as_string) {
  return new Date(date_as_string); 
}


function getPlateIDHTML(id) {
  var plate_id_html = '<div class="serial">%s</div>';
  return plate_id_html.format(id);
}

function getPlateNumberHTML(plateNumber) {
  var plate_number_html = '<div class="visit">%s</div>';
  return plate_number_html.format(plateNumber);

}        

function getPlateTypeCountryHTML(plateType) {
  var plateTypeCountry = {
    "1": "Tunisie TN",
    "2": "Tunisie RS",
    "3": "Tunisie GOV",
    "4": "Lybie",
    "5": "Algerie",
  };
  var plate_type_country_html = '<div class="country">%s</div>';
  if(plateType in plateTypeCountry) {
    return detection_data_html.format(plateTypeCountry[plateType]);
  } else {
    return detection_data_html.format("Autre");
  }
}


function getDetectionDateHtml(captured_date_as_string) {
  var date_of_capture_html = '<div class="percentage">%s/%s/%s %s:%s:%s</div>';
  var captured_date = parseStringAsJSDate(captured_date_as_string);
  return date_of_capture_html.format(captured_date.getDate(), captured_date.getMonth()+1, captured_date.getFullYear(), captured_date.getHours(), captured_date.getMinutes(), captured_date.getSeconds());
}

function getSnapshotLink(captured_date_as_string, plateNumber, plateType) {
  var snapshot_link = "http://127.0.0.1:3737/anpr/snapshot?year=%s&month=%s&year=%s&day=%s&hour=%s&minute=%s&second=%s&plate=%s&platetype=%s";
  var snapshot_link_html = '<div><a class="img-pop-up" href="%s">Link to picture</a></div>';
  var captured_date = parseStringAsJSDate(captured_date_as_string);
  var snapshot_link = snapshot_link.format(captured_date.getDate(), captured_date.getMonth()+1, captured_date.getFullYear(), captured_date.getHours(), captured_date.getMinutes(), captured_date.getSeconds(), plateNumber.split(" ").join("_"), plateType);

  return snapshot_link_html.format(snapshot_link);

}

Ниже приводится краткое объяснение каждой функции

  1. String.prototype.format: это эквивалент старой школы printf вC. Я нахожу переменные-подстановки вида '<div class="serial">'+ id +'</div>', смешивающие HTML с JavaScript, очень сложными для чтения. И поэтому это.

  2. parseStringAsJSDate: Я предполагаю, что ваш API находится под вашим контролем. Я рекомендую вам изменить формат даты на ISO8601 , чтобы он мог быть проанализирован JavaScript как Date. Ваша функция substr снова влияет на читабельность.

  3. getPlateIDHTML & getPlateNumberHTML: Простые функции, которые просто используют функцию форматирования для встраивания переданных переменных в HTML, чтобы показать ID и табличкучисло.

  4. getPlateTypeCountryHTML: здесь я использовал объект Python, чтобы уменьшить количество операций if и else if.

  5. getDetectionDateHtml &getSnapshotLink: Я пытался проанализировать дату как дату JavaScript, и это исключает substr s. Более того, использование формата еще больше упрощает эти функции.

Дайте мне знать ваши предложения по этому вопросу. Предложения / критика от стековых гуру приветствуются:)

ОБНОВЛЕНИЕ

Пожалуйста, проверьте мою обновленную функцию format. Я получил это от этого превосходного ответа. Извините, предыдущий был просто скопирован, я должен был попробовать. Пожалуйста, просто отформатируйте указанную функцию и дайте мне знать

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