Оформить скрипт 
		
		
		
		Здравствуйте.Написал скрипт, спасибо за помощь 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);
               			
              }
         })
    });
Может можно повторения как то систематизировать, что ли?  | 
	
		
 Слишком много одинаковых HTTP запросов на сервер. Почему результаты не кэшируются? 
	 | 
	
		
 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" легко пишется одна универсальная функция запроса.  | 
	
		
 Dilettante_Pro,OK, спасибо.Буду разбираться. 
	Цитата: 
	
  | 
	
		
 Цитата: 
	
 Выбрал в селекте значение A => запрос к серверу Выбрал в селекте значение B => запрос к серверу Выбрал в селекте опять значение A => опять запрос к серверу? Зачем последняя операция, если был выбор на первом шаге и её можно в каком-нибудь буфере сохранить и отдавать клиенту?  | 
	
		
 Решил кешировать первый запрос. Переписал ф-цию так 
	
$(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); 
        }
         })
	}
    });
 });
Но что то не хочет кешировать, что нужно поправить?  | 
	
		
 Цитата: 
	
 Идея такая: Пусть на этапе инициализации cache = []. Считали значение из select[name="mark"] (например, номер опции). Номер есть в массиве cache? Достали по номеру инфу записали в #brn. Иначе выполнили HTTP запрос и в функции обратного вызова success записали инфу по номеру в массив и в #brn. И вот таким образом создается разреженный массив, который позволяет уменьшить нагрузку на сервер, да и клиенту не придется ждать, пока придет ответ с сервера, если он есть в кэше. А если есть желание, лучше юзать фичи Set/Map в ES6. Скажем в Set номера опций, а в Map - отображение их в данные.  | 
	
		
 ОК, понял, сенкс. 
	 | 
	
		
 Сделал так 
	
$('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])
           }
         })
	   }		 
    });
Но не кеширует.  | 
	
		
 потому что массив cache всегда пустой. Да и 15 строчка весьма странная, учитывая что в js нет ассоциативных массивов. 
	 | 
	
		
 Блин, не выходит.Как не изголяюсь , либо ошибка, либо не кешерует. 
	
$(function() {
var cache =[];
var url = "/modules/mod_search_auto/ajax.php";
    $('select[name="mark"]').change(function() {
	
         var m_id = this.name + '=' + this.value;	
				 
		if(cache=[data]){$('#brn').html(cache);}
		 else{
         $.ajax({
              type:"POST",
              url:url,
             data: m_id,
             success:function(data){ 
                cache = [data];			 
                $('#brn').html(cache);
               			
            //  }
            }
		 })
		 }
    });
})
 | 
	
		
 так и не смог добиться кеширования. Может кто подскажет почему.Последний вариант такой. 
	
var cache=[];
$(function(data) {
var url = "/modules/mod_search_auto/ajax.php";
var cacheData = cache[data];
    $('select[name="mark"]').change(function() {
      // var cacheData = cache[data];  пробовал и сюда ставить
         var mid = this.name + '=' + this.value;	
		if(cacheData){
		$('#brn').html(cacheData);
		}else{
         $.ajax({
              type:"POST",
              url:url,
             data: mid,
             success:function(data){ 		 
                $('#brn').html(data);
                 cache[data] = data;
				 
            }
		 })
		 }
    })
})
 | 
	
		
 Вернемся к варианту пост#9 (потому что последний - действительно... последний) 
	Цитата: 
	
 Потом, мне кажется, вы запутались с переменными data: data в строках 3 - 12 и в строках 13-16 - это разные переменные, Первая - это значение, которое вы берете из html и передаете в запросе на сервер. (но не проверяли кеш на ее наличие и не запомнили в кеш ). Вторая - определяется в строке 13 как параметр функции и представляет ответ сервера (что там - я, например, не знаю). Поэтому строка 15 cache[data] = data; - что это значит? Эту переменную, во избежание путаницы, лучше обозвать по-другому. С учетом вышеизложенного можете попробовать снова. В разных ваших вариантах есть отдельные правильные мысли, но они перемешаны с ошибками  | 
	
		
 ureech, 
	
(function(){
  var cache ={};
  $('select[name="mark"]').change(function() {
         var data0 = this.name + '=' + this.value;
         if(cache[data0]){
             $('#brn').html(cache[data0]);
         } else {
           $.ajax({
              type:"POST",
              url:"/modules/mod_search_auto/ajax.php",
              dataType:"html",
              data: data0,
              success: function(response) {
                 $('#brn').html(response);
                 cache[data0] = response;
                 // alert(cache[data0])
              }
           });
         }		 
  });
})();
 | 
	
		
 Ни хрена не хочет, по разному пробовал и как Alex_63, написал тоже. Может где запрет на кеширование, в заголовках ответа  
	Cache-control:no-cache... Pragma:"no-cache" Это результат или причина?  | 
	
		
 Цитата: 
	
 <option id='Vulcan' value='1002' >Vulcan</option><option id='Rapide S' value='1002' >Rapide S</option>  | 
	
		
 Цитата: 
	
 Cache-control:no-cache... Pragma:"no-cache" здесь совершенно ни при чем - ваш кеш - совсем не кеш, а просто переменная типа массив. Вариант Alex_63 почти правильный, он устранил все ошибки, за исключением одной: 
var data0 = this.name + '=' + this.value;
         if(cache[data0]){
Индекс массива - это целое число, начиная с 0. В качестве индекса вам нужно использовать целые числа, однозначно связанные с парой this.name this.value. Пример реализации такой индексации пар this.name this.value 
<head>
    <title>Untitled Page</title>
</head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script>
    window.onload = function () {
        $('select').change(function () {
            alert($(this).data("ind") + $(this)[0].selectedIndex);
        });
    }
</script>
<body>
mark
<select data-ind="100" name="mark">
    <option >Выберите вариант</option>
    <option  value="11">первый</option>
    <option  value="22">второй</option>
    <option  value="33">третий</option>
    <option  value="44">четвертый</option>
</select>
<br />
brend 
<select data-ind="200" name="brend">
    <option >Выберите вариант</option>
    <option  value="11">первый</option>
    <option  value="22">второй</option>
    <option  value="33">третий</option>
    <option  value="44">четвертый</option>
</select>
</body>
</html>
 | 
	
		
 Блин,слва Богу и Dilettante_Pro, добил, эти массивы. 
	
$(function() {
var url = "/modules/mod_search_auto/ajax.php";
var cache ={};
    $('select[name="mark"]').change(function() {
         var data = this.name + '=' + this.value;	
          var index = this.options.selectedIndex;
    if(cache[index]){
	$('#brn').html(cache[index]);
	}else{
         $.ajax({
              type:"POST",
              url:url,
             data: data,
             success:function(response){ 		 
                $('#brn').html(response);
				cache[index] = response;
            }
		 })
}		 
    })
Всем спасибо :)  | 
	
		
 ureech, 
	В таком варианте var index = this.options.selectedIndex; нужен отдельный кеш для каждого селекта а в варианте из пост№17 var index = $(this).data("ind") + $(this)[0].selectedIndex - один кеш для всех  | 
	
		
 Понял, поправлю. 
	 | 
	
		
 ureech, 
	
(function(){
  var cache ={};
  $('select[name="mark"]').change(function() {
         var data0 = this.name + '=' + this.selectedIndex.value;
         if(cache[data0]){
             $('#brn').html(cache[data0]);
         } else {
           $.ajax({
              type:"POST",
              url:"/modules/mod_search_auto/ajax.php",
              dataType:"html",
              data: data0,
              success: function(response) {
                 $('#brn').html(response);
                 cache[data0] = response;
                 // alert(cache[data0])
              }
           });
         }		 
  });
})();
 | 
	
		
 Alex_63, 
	Спасибо, за желание помочь, но твой вариант не работает, у меня по крайней мере.:)  | 
| Часовой пояс GMT +3, время: 02:15. |