Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.03.2016, 08:59
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 765

Оформить скрипт
Здравствуйте.Написал скрипт, спасибо за помощь laimas, можно как то по другому его "оформить", а то как то не красиво. Скрипт состоит из нескольких запросов.Вот два для примера
$('select[name="brend"]').change(function() {
         var data = this.name + '=' + this.value;
          var index = this.options.selectedIndex;
            var id = this.options[index].text;
    sessionStorage.setItem('type_title', id); 
         $.ajax({
              type:"POST",
              url:"/modules/mod_search_auto/ajax.php",
             data: data,
             success:function(data){                            
                $('#bod').html(data);		
              }
         })

    });


$('select[name="mark"]').change(function() {
         var data = this.name + '=' + this.value;	
          var index = this.options.selectedIndex;
            var id = this.options[index].text;
    sessionStorage.setItem('model_title', id);	
		 
         $.ajax({
              type:"POST",
              url:"/modules/mod_search_auto/ajax.php",
             data: data,
             success:function(data){                            
                $('#brn').html(data);
               			
              }
         })

    });

Может можно повторения как то систематизировать, что ли?
Ответить с цитированием
  #2 (permalink)  
Старый 28.03.2016, 09:36
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Слишком много одинаковых HTTP запросов на сервер. Почему результаты не кэшируются?
Ответить с цитированием
  #3 (permalink)  
Старый 28.03.2016, 10:30
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

ureech,

В select`ы добавить класс и атрибуты data- (http://htmlbook.ru/blog/atribut-data)
(можно и без класса, только атрибуты data-, в т.ч. и общий для группы селектов вместо класса)
В этих атрибутах задавать имя хранимого параметра, id размещения результата и т.п., например:
<select data-class="group" data-name="type_title" data-resid="#bod">


При таких атрибутах для всех селектов с data-class="group" легко пишется одна универсальная функция запроса.
Ответить с цитированием
  #4 (permalink)  
Старый 28.03.2016, 11:49
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 765

Dilettante_Pro,OK, спасибо.Буду разбираться.

Сообщение от destus
Слишком много одинаковых HTTP запросов на сервер. Почему результаты не кэшируются?
Только адрес одинаковый, но там разные параметры передаются и обрабтываются по разному.
Ответить с цитированием
  #5 (permalink)  
Старый 28.03.2016, 11:55
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Цитата:
Только адрес одинаковый, но там разные параметры передаются и обрабтываются по разному.
Вы меня не поняли. Допустим у вас в селекте 200 значений. В вашем случае при каждом изменении селекта будет запрос к серверу.

Выбрал в селекте значение A => запрос к серверу
Выбрал в селекте значение B => запрос к серверу
Выбрал в селекте опять значение A => опять запрос к серверу?

Зачем последняя операция, если был выбор на первом шаге и её можно в каком-нибудь буфере сохранить и отдавать клиенту?
Ответить с цитированием
  #6 (permalink)  
Старый 28.03.2016, 19:50
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 765

Решил кешировать первый запрос. Переписал ф-цию так

$(function() {
	var cache
     callback = function (data) {
     $('#brn').html(data);
                               };
        $('select[name="mark"]').change(function() {
         var data = this.name + '=' + this.value;
           if (cache) { 
         callback(cache); 
                      } else {
         $.ajax({
              type:"POST",
              url:"/modules/mod_search_auto/ajax.php",
			  dataType:"html",
             data: data,
			 cache:true,
         success: function(data) {
          cache = data; 
          callback(cache); 
        }

         })
	}
    });
 });

Но что то не хочет кешировать, что нужно поправить?
Ответить с цитированием
  #7 (permalink)  
Старый 28.03.2016, 20:12
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Цитата:
что нужно поправить?
Да много всего. Почему переменная callback создается в глобальном пространстве? Зачем строка 16?

Идея такая: Пусть на этапе инициализации cache = []. Считали значение из select[name="mark"] (например, номер опции).
Номер есть в массиве cache? Достали по номеру инфу записали в #brn. Иначе выполнили HTTP запрос и в функции обратного вызова success записали инфу по номеру в массив и в #brn.

И вот таким образом создается разреженный массив, который позволяет уменьшить нагрузку на сервер, да и клиенту не придется ждать, пока придет ответ с сервера, если он есть в кэше. А если есть желание, лучше юзать фичи Set/Map в ES6. Скажем в Set номера опций, а в Map - отображение их в данные.
Ответить с цитированием
  #8 (permalink)  
Старый 28.03.2016, 20:44
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 765

ОК, понял, сенкс.
Ответить с цитированием
  #9 (permalink)  
Старый 28.03.2016, 21:55
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 765

Сделал так
$('select[name="mark"]').change(function() {
			var cache =[];
         var data = this.name + '=' + this.value;
		 if(cache[data]){
		 $('#brn').html(cache[data]);
		 //alert('11111111')
                      } else {
         $.ajax({
              type:"POST",
              url:"/modules/mod_search_auto/ajax.php",
			  dataType:"html",
             data: data,
         success: function(data) {
		 $('#brn').html(data);
          cache[data] = data;
		 // alert(cache[data])
           }
         })
	   }		 
    });

Но не кеширует.
Ответить с цитированием
  #10 (permalink)  
Старый 28.03.2016, 22:27
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

потому что массив cache всегда пустой. Да и 15 строчка весьма странная, учитывая что в js нет ассоциативных массивов.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Правильно оформить скрипт ureech Элементы интерфейса 9 20.01.2016 19:53
PHP/AJAX скрипт "Нaселение мoегo гoрoдa oнлaйн" rustik-yes Работа 2 01.12.2014 22:53
Почему скрипт не работает с данными, которые вернул другой скрипт? Rooner jQuery 3 20.09.2012 14:56
Правильно оформить скрипт hell100 Общие вопросы Javascript 6 03.04.2012 13:03
Изменить скрипт Изучаю_JS Общие вопросы Javascript 0 12.02.2012 22:05