28.07.2014, 17:57
|
Интересующийся
|
|
Регистрация: 01.08.2013
Сообщений: 23
|
|
Ajax подгрузка блок в зависимости от куков
Доброго времени суток. Есть сайт. Позиции добавляются в заказ. Хранится все в куках в таком виде: name: m_ids. Value: 258%2C167%1C067 и тд. Т.е. позиции отделены в куках %. Мой вопрос, как сделать так, чтобы при нажать на кнопку:
<a href="#" onClick="doAdd(^[$id]); return false;"></a>
т.е. на кнопку добавления позиции в корзину, без обновления страницы подгружался блок, в котором было бы просто написано: у вас выбрано 1(2\3\4) позиции. Как считать количество записей в куках (в поле Value) без перезагрузки страницы? И чтобы появившийся блок оставался и на других страницах, пока в куках в поле m_ids что-то есть?
Ставятся куки так:
function setCookie (name, value, expiredays, path, domain, secure) {
if (expiredays) {
var todayDate = new Date();
todayDate.setDate(todayDate.getDate() + expiredays);
}
var curCookie = name + "=" + escape(value) +
((expiredays) ? ";expires=" + todayDate.toGMTString() : "") +
((path) ? ";path=" + path : "") +
((domain) ? ";domain=" + domain : "") +
((secure) ? ";secure" : "");
if ((escape(value)).length <= 4000) document.cookie = curCookie+";";
}
function getCookie (name) {
var prefix = name + "=";
var cookieStartIndex = document.cookie.indexOf(prefix);
if (cookieStartIndex == -1) return null;
var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length);
if (cookieEndIndex == -1) cookieEndIndex = document.cookie.length;
return unescape(document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex));
}
function deleteCookie (name, path, domain) {
if (getCookie(name)) {
document.cookie = name + "=" +
((path) ? "; path=" + path : "") +
((domain) ? "; domain=" + domain : "") + "; expires=Thu, 01-Jan-99 00:00:01 GMT"
}
}
Оформить подгружаемый блок я смогу. Я не могу сделать так, чтобы этот блок с счетчиком, собственно, появился, считал и оставался на сайте.
Если нужно что-то еще из кода - могу предоставить. Спасибо за помощь.
|
|
28.07.2014, 19:47
|
Интересующийся
|
|
Регистрация: 01.08.2013
Сообщений: 23
|
|
https://yadi.sk/i/PsLJE5QAY5Xiv
вот скрин с куками. Трехзначное число в куках - это id из БД. Потом по нему на странице оформления выводятся позиции из БД.
Последний раз редактировалось november, 28.07.2014 в 19:50.
|
|
28.07.2014, 20:28
|
Интересующийся
|
|
Регистрация: 01.08.2013
Сообщений: 23
|
|
Удалено.
Последний раз редактировалось november, 28.07.2014 в 20:40.
|
|
28.07.2014, 20:40
|
Интересующийся
|
|
Регистрация: 01.08.2013
Сообщений: 23
|
|
Нет, это вот этот кусок. Ошибся.
function doAdd(id) {
var m_ids = getCookie('m_ids');
if (m_ids) {
var arr = new Array();
arr = m_ids.split(',');
var find = 0;
for (i=0; i<arr.length; i++) {
if (arr[i] == id) {
find = 1;
alert("Модель уже есть в списке заказа.");
return false;
}
}
arr.push(id);
setCookie('m_ids', arr.join(","), '', "/");
} else {
setCookie('m_ids', id, '', "/");
}
alert("Модель добавлена в список заказа.");
return false;
}
function doDelete(id) {
if (!confirm("Удалить модель из списка?")) return;
var m_ids = getCookie('m_ids');
if (m_ids) {
var arr = m_ids.split(',');
var new_arr = new Array();
for (var i=0; i<arr.length; i++) {
if (arr[i]!=id) new_arr.push(arr[i]);
}
if (new_arr.length>0) {
setCookie('m_ids', new_arr.join(","), '', "/");
} else {
deleteCookie('m_ids', "/");
}
window.location.reload();
}
}
function doClear() {
if (!confirm("Удалить всех моделей?")) return;
deleteCookie('m_ids', "/");
window.location.reload();
}
function showError() {
try {
if (error) alert(error);
} catch(e) {}
}
|
|
28.07.2014, 22:22
|
Интересующийся
|
|
Регистрация: 01.08.2013
Сообщений: 23
|
|
Работает!!! Спасибо огромное!!!
|
|
29.07.2014, 02:43
|
Интересующийся
|
|
Регистрация: 01.08.2013
Сообщений: 23
|
|
Вы можете мне еще чуть-чуть помочь?
Код, что вы написали, отлично работает. Хочу еще немного улучшить отображение на сайте.
<a href="#" onClick="doAdd(^[$id]); return false;"><img src="/images/design/add_model.gif" width="152" height="29" border="0"></a>
Вот внутри есть картинка. Я хочу, чтобы она после нажатия (т.е. добавления) менялась на другую (на вроде "заказать -> заказано").
Как сделать так, чтобы браузер помнил, какую позицию я заказал?
Вот здесь уже есть проверка на то, добавлена ли позиция или нет:
function doAdd(id) {
var m_ids = getCookie('m_ids');
if (m_ids) {
var arr = new Array();
arr = m_ids.split(',');
var find = 0;
for (i=0; i<arr.length; i++) {
if (arr[i] == id) {
find = 1;
alert("Модель уже есть в списке заказа.");
return false;
}
}
arr.push(id);
setCookie('m_ids', arr.join(","), '', "/");
} else {
setCookie('m_ids', id, '', "/");
}
showNumPos();
alert("Модель добавлена в список заказа.");
return false;
}
Как сделать эту проверку для картинки?
|
|
29.07.2014, 15:57
|
Профессор
|
|
Регистрация: 07.11.2013
Сообщений: 458
|
|
november,
<head>
<script>
function showNumPos() {
var p = document.getElementById('nPos');
var b = document.getElementById('btn') || document.createElement('input');
var c = getCookie('m_ids');
if (c) {
var a = c.split(',');
for (var i = 0; i < a.length; i++) {
if (a[i] == b.alt) {
b.src = '/images/design/added_model.gif';
break;
}
}
p.innerHTML = 'Выбрано моделей: ' + a.length;
//if (p.style.display != 'block') p.style.display = 'block';
} else {
b.src = '/images/design/add_model.gif';
p.innerHTML = 'Выбрано моделей: 0';
//if (p.style.display != 'none') p.style.display = 'none';
}
}
function doAdd(btn) {
var c = getCookie('m_ids');
if (c) {
var a = c.split(',');
for (i = 0; i < a.length; i++) {
if (a[i] == btn.alt) {
alert('Модель уже есть в списке заказа.');
return false;
}
}
a.push(btn.alt);
setCookie('m_ids', a.join(','), '', '/');
} else {
setCookie('m_ids', btn.alt, '', '/');
}
showNumPos();
alert('Модель добавлена в список заказа.');
return false;
}
function doDelete(id) {
if (!confirm('Удалить модель из списка?')) return;
var c = getCookie('m_ids');
if (c) {
var a = c.split(','), n = [];
for (var i = 0; i < a.length; i++) {
if (a[i] != id) n.push(a[i]);
}
if (n.length) {
setCookie('m_ids', n.join(','), '', '/');
} else {
deleteCookie('m_ids', '/');
}
showNumPos();
}
}
function doClear() {
if (!confirm('Удалить всех моделей?')) return;
var c = getCookie('m_ids');
if (c) {
deleteCookie('m_ids', '/');
showNumPos();
}
}
(function(){
var i = new Image();
i.src = '/images/design/add_model.gif';
i.src = '/images/design/added_model.gif';
})();
</script>
</head>
<body>
<div id="nPos" style="display:block"></div>
<input id="btn" type="image" src="/images/design/add_model.gif" alt="^[$id]" onclick="return doAdd(this)">
<script>showNumPos();</script>
</body>
Последний раз редактировалось Rise, 30.07.2014 в 20:14.
|
|
29.07.2014, 17:12
|
Интересующийся
|
|
Регистрация: 01.08.2013
Сообщений: 23
|
|
Спасибо больше за ответ! Но вот, что-то не работает. Т.е. добавление происходит - а картинка не меняется. Даже после обновления страницы.
И еще, при загрузке страницы сначала (меньше, чем на 1 сек) на месте кнопки появляется цифра (ID), потом она превращается в картинку. Примерно тоже самое происходит с блоком
<div id="nPos" style="display:none"></div>
- но это проблему я решил добавлением анимации к появлению блока.
На сколько я понимаю, все эти действия происходят после загрузки страницы, поэтому эти элементы и будут прыгать - ничего с этом не сделать.
|
|
29.07.2014, 17:40
|
Интересующийся
|
|
Регистрация: 01.08.2013
Сообщений: 23
|
|
Rise,
я могу дать адрес страницы в личку, если это возможно.
|
|
|
|