Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.10.2012, 05:37
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

Функция кеширования(трудно :))
Есть страничка, на ней есть элемент-контейнер N с содержимым(картинки), также на страничке присутствуют радиокнопки.

Когда пользователь нажимает на радиокнопку происходит Ajax-запрос и в элемент-контейнер N загружается другое содержимое

Решил сделать автокеширование, чтобы лишний раз не гонять запросы на сервер.
То есть, когда пользователь нажимает на радиокнопку, содержимое элемента-контейнера N сохраняется в объект в виде NodeList и при повторном нажатии это содержимое становится доступно из этого объекта.

Вот сам код:

var N = document.getElementById("imgCont"); // это элемент контейнер
var obj = {}; // объект, в котором будем сохранять содержимое N
var buts = document.getElementById("buttoms"); // контейнер с радиокнопками

var dir = "dir1"; // тут хранятся значения value от радиокнопок. По умолчанию dir1

function getNewContent (e) {

//..тут описан код отфильтровывающий действия на событие, он не представляет интереса...//

    saveObjectIMG(dir); // кешируем

    if (obj[e.target.value]) {

            N.innerHTML = obj[e.target.value]; // возвратим данные в контейнер

    }
    // иначе загрузим AJAXом
    else {
        //*тут ajax запрос, он не представляет интереса*//
    } 

    // В конце изменем название директории та активное
    dir = e.target.value;

}

function saveObjectIMG(param) {

    var result = N.innerHTML;
    obj[param] = result;
 
    return obj[param];

}

buts.onclick = getNewContent; // при клике на радиокнопку


Исправил, должно работать c InnerHTML

Последний раз редактировалось dmitry111, 17.10.2012 в 18:03.
Ответить с цитированием
  #2 (permalink)  
Старый 16.10.2012, 06:53
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,514

childNodes - это именно активные childNodes. Делая obj[name] = N.childNodes ты присваиваешь obj[name] лишь ссылку на N.childNodes. Соответственно если N умрёт или умрут его childNodes - obj[name] тоже будет пустым.
Надо в случае сокрытия не удалять ноды, а перемещать их в кеширующий documentFragment.
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 16.10.2012, 07:42
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

Aetae,

спасибо!
Долго не мог понять что значит фраза:
"живое" представление дочерних элементов

в русской версии книжки Флэнагана.

Последний раз редактировалось dmitry111, 16.10.2012 в 09:59.
Ответить с цитированием
  #4 (permalink)  
Старый 16.10.2012, 14:42
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

Подкиньте кто-нибудь примерчик как закешировать живой childNode..
Или на словах объясните

Оно меня победило, мучаюсь с 5 утра , и все никак
Ответить с цитированием
  #5 (permalink)  
Старый 16.10.2012, 15:05
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

вы пробовали дебажить код с помощью debugger и инструментов разработчика ?

сделайте пример на jsfiddle - там можно делать AJAX запросы. так легче будет разобратсья.
Ответить с цитированием
  #6 (permalink)  
Старый 16.10.2012, 20:36
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

dmitry111,
сохраняй innerHTML. А если уж так хочешься childNodes то:

var cached = Array.prototype.slice.call(element.childNodes, 0);


Только тогда для ие придётся свои кастыли делать.
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
  #7 (permalink)  
Старый 16.10.2012, 20:41
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

вопрос нахрена, если картинки?
1 гет аякс запросы кешируются.
2 картинки кешируются.
3 достаточно сохранять параметры запроса+адрес картинки если не гет, чтоб не делать запрос какой уже был
Ответить с цитированием
  #8 (permalink)  
Старый 16.10.2012, 21:25
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от dmitriymar
1 гет аякс запросы кешируются.
да? поподробнее, пожалуйста.
Ответить с цитированием
  #9 (permalink)  
Старый 16.10.2012, 21:48
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

melky,
а сам для чего соль добавлял в гет аякс запросы? тема неоднократно была на форуме, хотя это возможно только в ие, но хотя было и не только в нём. но в случае т.с то что он получает адреса изображений. кеширование легко организать как описано у Стефанова.

Последний раз редактировалось dmitriymar, 16.10.2012 в 21:51.
Ответить с цитированием
  #10 (permalink)  
Старый 16.10.2012, 22:10
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от dmitriymar
а сам для чего соль добавлял в гет аякс запросы?
не доводилось - редко работаю с аяксом. только сейчас прочитал про то, что они кешируются )
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать где находится функция, на которую указывает javascript:openTag('mgmt') amigo* Общие вопросы Javascript 13 11.04.2012 12:11
функция и несуществующий id Ankh Элементы интерфейса 4 10.02.2012 23:49
функция не успевает Sadist_dead Элементы интерфейса 22 02.10.2011 19:00
Где вызывается функция? cradis Общие вопросы Javascript 5 23.04.2011 13:47
Не работает функция из подключаемого файла evgenyan jQuery 3 28.10.2010 14:48