Отображение данных поиска с фильтрацией

Я разрабатываю приложение с API поиска рейсов (Multicom FindAndBook), которое возвращает большие результаты на основе заданного ввода.

Моя проблема заключается в том, как я могу отфильтровать возвращенные данные (цена, время прибытия, время отправления, количество остановок и название авиакомпании)? Я нашел три решения для фильтрации

1) Фильтрация данных на стороне клиента с помощью jQuery

Но здесь я фильтрую данные с помощью jQuery, но мне трудно разбить отфильтрованные данные на страницы.

2) Выполнение Ajax-запроса к серверу для фильтрации с использованием PHP

Но для загрузки данных требуется больше времени.

3) Сброс результатов поиска в базу данных WebSQL и фильтрация данных на клиенте.

Здесь я могу фильтровать данные, но правильно ли фильтровать данные из локальной базы данных?

Может ли кто-нибудь сказать мне, как правильно добиться высокой производительности?

Изменить:

API не обеспечивает фильтрацию, но каждый запрос фильтра занимает много времени (до 30 секунд). Я решил, что лучше получить все данные поиска и отфильтровать данные результатов.

Это Fiddle для моей фильтрации jQuery:

$(function () {
  var minPrice = 299,
      maxPrice = 1099,
      $filter_lists = $("#filters ul"),
      $filter_checkboxes = $("#filters :checkbox"),
      $items = $("#computers li.system");

  $filter_checkboxes.click(filterSystem);

  $('#slider-container').slider({
      range: true,
      min: minPrice,
      max: maxPrice,
      values: [minPrice, maxPrice],
      slide: function (event, ui) {
          $("#amount").val("$" + ui.values[0] + " - $" + ui.values[1]);
          minPrice = ui.values[0];
          maxPrice = ui.values[1];
          filterSystem();
      }
  });
  $("#amount").val("$" + minPrice + " - $" + maxPrice);

  function filterSlider(elem) {
      var price = parseInt($(elem).data("price"), 10);
      console.log(price);
      return price >= minPrice && price <= maxPrice;
  }

  function filterCheckboxes(elem) {
      var $elem = $(elem),
          passAllFilters = true;
      $filter_lists.each(function () {
          var classes = $(this).find(':checkbox:checked').map(function () {
              return $(this).val();
          }).get();
          console.log('classes', classes);
          var passThisFilter = false;
          $.each(classes, function (index, item) {
              if ($elem.hasClass(item)) {
                  console.log('hasClass', item);
                  passThisFilter = true;
                  return false; //stop inner loop
              }
          });
          if (!passThisFilter) {
              passAllFilters = false;
              return false; //stop outer loop
          }
      });
      return passAllFilters;
  }

  function filterSystem() {
      $items.hide().filter(function () {
          return filterSlider(this) && filterCheckboxes(this);
      }).show();
  }
});

person user3354774    schedule 26.02.2014    source источник
comment
Какой API поиска рейсов вы используете? Пожалуйста, отредактируйте это в своем вопросе. Вы не можете сделать фильтрацию с помощью самого API? (Я подозреваю, что этот вопрос довольно широк, поскольку лучший способ сделать это в каждом случае будет разным. Возможно, вам придется показать какой-то код, чтобы получить конкретные ответы).   -  person halfer    schedule 26.02.2014
comment
Добро пожаловать в Stack Overflow. Пожалуйста, покажите нам, что вы пробовали. Вы можете посетить stackoverflow.com/help/on-topic   -  person PKumar    schedule 26.02.2014
comment
@KP6 Я обновил свой вопрос тем, что пробовал   -  person user3354774    schedule 26.02.2014
comment
@halfer Как насчет того, если я сохраню данные в локальной базе данных   -  person user3354774    schedule 26.02.2014
comment
Я решил, что лучше получить все данные поиска - я не знаю этого API, но я думаю, что вы делаете это неправильно. Выполняйте поиск через API, а не самостоятельно.   -  person halfer    schedule 26.02.2014
comment
@halfer предпочтительнее хранить данные в WebSQL ????   -  person user3354774    schedule 26.02.2014
comment
Я не пробовал, но я так не думаю, нет. Делайте все запросы через API, как я уже сказал. Можете ли вы объяснить, что именно занимает 30 секунд?   -  person halfer    schedule 26.02.2014
comment
@halfer, чтобы отправить запрос и получить форму ответа API, занимает почти 20-30 секунд для каждого запроса.   -  person user3354774    schedule 26.02.2014
comment
Это звучит неправильно. Зарегистрируйте запрос в службу поддержки у поставщика API, чтобы узнать, есть ли у него ошибка или есть ли другой способ, который они рекомендуют.   -  person halfer    schedule 26.02.2014


Ответы (1)


Я бы пошел с 1-м вариантом и заставил его работать. Другие два — это своего рода хаки для достижения чего-то, что может быть достигнуто в простом javascript. Если для этого нет функции jquery по умолчанию, в чем я сомневаюсь, вы должны сохранить свои данные в переменной javascript, прежде чем отображать их в пользовательском интерфейсе. Каждый раз, когда вы меняете фильтры или сортировку, создавайте свое подмножество из исходных сохраненных данных. Разбивка на страницы проста, все, что вам нужно сделать, это получить общее количество вашего подмножества отфильтрованных данных и отобразить номера страниц. Math.ceil(tatalcount/pagesize) при каждом щелчке страницы вы будете знать индекс вашего подмножества данных и получать его соответственно. Я могу только предоставить подход, который вам нужен, чтобы закодировать его самостоятельно. Но, как уже говорилось, два других подхода неэффективны.

person TechMaze    schedule 02.03.2014
comment
Спасибо за ваше предложение - person user3354774; 07.03.2014