Javascript.RU

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

Блин, не выходит.Как не изголяюсь , либо ошибка, либо не кешерует.
$(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);
               			
            //  }
            }
		 })
		 }
    });
})

Последний раз редактировалось ureech, 29.03.2016 в 09:07.
Ответить с цитированием
  #12 (permalink)  
Старый 29.03.2016, 12:48
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 765

так и не смог добиться кеширования. Может кто подскажет почему.Последний вариант такой.
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;
				 
            }
		 })
		 }
    })
})
Ответить с цитированием
  #13 (permalink)  
Старый 29.03.2016, 18:01
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Вернемся к варианту пост#9 (потому что последний - действительно... последний)
Сообщение от ureech Посмотреть сообщение
Сделал так
$('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])
           }
         })
	   }		 
    });

Но не кеширует.
Чтобы кеш все помнил, его определение var cache =[]; нужно вынести на глобальный уровень (как в последнем варианте )
Потом, мне кажется, вы запутались с переменными data:
data в строках 3 - 12 и в строках 13-16 - это разные переменные,
Первая - это значение, которое вы берете из html и передаете в запросе на сервер. (но не проверяли кеш на ее наличие и не запомнили в кеш ).
Вторая - определяется в строке 13 как параметр функции и представляет ответ сервера (что там - я, например, не знаю).
Поэтому строка 15
cache[data] = data;
- что это значит?
Эту переменную, во избежание путаницы, лучше обозвать по-другому.

С учетом вышеизложенного можете попробовать снова. В разных ваших вариантах есть отдельные правильные мысли, но они перемешаны с ошибками
Ответить с цитированием
  #14 (permalink)  
Старый 29.03.2016, 18:39
Аспирант
Отправить личное сообщение для Alex_63 Посмотреть профиль Найти все сообщения от Alex_63
 
Регистрация: 22.08.2015
Сообщений: 71

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])
              }
           });
         }		 
  });
})();
Ответить с цитированием
  #15 (permalink)  
Старый 29.03.2016, 21:45
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 765

Ни хрена не хочет, по разному пробовал и как Alex_63, написал тоже. Может где запрет на кеширование, в заголовках ответа
Cache-control:no-cache...
Pragma:"no-cache"
Это результат или причина?
Ответить с цитированием
  #16 (permalink)  
Старый 29.03.2016, 21:50
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 765

Сообщение от Dilettante_Pro
Вторая - определяется в строке 13 как параметр функции и представляет ответ сервера (что там - я, например, не знаю)
В ответе строка, html код
<option id='Vulcan' value='1002' >Vulcan</option><option id='Rapide S' value='1002' >Rapide S</option>
Ответить с цитированием
  #17 (permalink)  
Старый 30.03.2016, 10:13
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Сообщение от ureech Посмотреть сообщение
Ни хрена не хочет, по разному пробовал и как Alex_63, написал тоже. Может где запрет на кеширование, в заголовках ответа
Cache-control:no-cache...
Pragma:"no-cache"
Это результат или причина?
ureech,
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, 30.03.2016 в 11:39.
Ответить с цитированием
  #18 (permalink)  
Старый 30.03.2016, 13:36
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 765

Блин,слва Богу и 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;
            }
		 })
}		 
    })

Всем спасибо
Ответить с цитированием
  #19 (permalink)  
Старый 30.03.2016, 14:07
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

ureech,
В таком варианте
var index = this.options.selectedIndex;
нужен отдельный кеш для каждого селекта
а в варианте из пост№17
var index = $(this).data("ind") + $(this)[0].selectedIndex
- один кеш для всех

Последний раз редактировалось Dilettante_Pro, 30.03.2016 в 14:10.
Ответить с цитированием
  #20 (permalink)  
Старый 30.03.2016, 14:13
Профессор
Отправить личное сообщение для ureech Посмотреть профиль Найти все сообщения от ureech
 
Регистрация: 11.03.2013
Сообщений: 765

Понял, поправлю.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Правильно оформить скрипт 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