Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Работа с coockie

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Совместимость браузеров
Friendly Man
Отправлено: 16 Апреля, 2010 - 17:36:51
Post Id



Новичок


Покинул форум
Сообщений всего: 47
Дата рег-ции: Апр. 2009  
Откуда: Россия - Армения, Москва-Ереван


Помог: 0 раз(а)




Доброго времени суток:

Есть скрипт с Функцией формирования корзины интернет магазина которая отлично работает в Opera и IE но некорректно работает в Mozilla Firefox 3.6.3
Теперь непосредственно перейду к конкретике вот функция на JavaScript:

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. // Функция формирования корзины --------------------------------------------
  3. function buy_basket(id_item, price){
  4.  
  5. var id_item=Number(id_item);// ID товара
  6. var price=Number(price); // Цена товара
  7. var allcoockies=document.cookie; // Просмотр coockie в документе
  8. var pos_aph_goods=allcoockies.indexOf("aph_goods="); // поиск кука с именем aph_goods
  9.  
  10. if(pos_aph_goods == -1){ // в случае отсутствия такого кука
  11.   // Формируем значение кукиеса
  12.   var item_and_price = id_item + '-' + price;
  13.   //Записываем значение в coockie
  14.   document.cookie = "aph_goods=" + escape(item_and_price) + "; path=/";
  15.   // Формируем строку с id-price
  16.         var value_coc_for_arr = item_and_price
  17.         // Кол-во товаров при первой покупке
  18.         arr_value_coc_lngth = 1;
  19.         //Цена при первой покупке              
  20.         al_itm_price = price;
  21. }
  22. else {// в случае существования
  23.   var start=pos_aph_goods + 10; // Начало значения кукиес
  24.   var end=allcoockies.indexOf (";", start);// Конец значения кукиес
  25.   if (end == -1) end = allcoockies.lenght;
  26.   var value_coc = allcoockies.substring(start,end); // Извлекаем значение
  27.   value_coc = unescape(value_coc); // Декодируем
  28.   // ПереФормируем значение кукиеса
  29.         var item_and_price = value_coc + '|' + id_item + '-' + price;
  30.   // ПереЗаписываем значение в кукиес
  31.         document.cookie = "aph_goods=" + escape(item_and_price) + "; path=/";
  32.         // Формируем строку с id-price
  33.         var value_coc_for_arr = item_and_price;
  34. }
  35. //просмотр значений coockie
  36. document.getElementById("stut_cart").innerHTML=value_coc_for_arr;
  37. }
  38.  


А вот и форма по работе:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4.   <head>
  5.   <meta http-equiv="content-type" content="text/html; charset=windows-1251">
  6.   <script type="text/javascript" src="script_5.js"></script>
  7.   <title>Для Ромы</title>
  8.   </head>
  9.   <body>
  10.  <div style="border:1px solid black; width:200px;height:50px;text-align:center;" id="stut_cart"></div><br>
  11. <table>
  12.   <tr>
  13.     <td>Телевизор</td>
  14.     <td><a onclick="buy_basket(30783,10000); return false;" href='#'>Купить</a></td>
  15.    </tr>
  16.    <tr>
  17.     <td>Телефон</td>
  18.     <td><a onclick="buy_basket(30986,5000); return false;" href='#'>Купить</a></td>
  19.     </tr>
  20.     <tr>
  21.      <td>Домашний кинотеатр</td>
  22.      <td><a onclick="buy_basket(30567,50000); return false;" href='#'>Купить</a></td>
  23.     </tr>
  24. </table>
  25.  
  26.   </body>
  27. </html>
  28.  
  29.  


И вот в чём проблема если данный скрипт запустить на Opera или IE при каждом нажатии ссылки на товар в блоке <div id="stut_cart"> появляются значения c ID товара и Цены тем самым их можно суммировать и подсчитать количество объектов в массиве.
Но при нажатии на ссылку товара в Mozilla Firefox наименование показывается только один раз.

Помогите пожалуйста разобраться. Может дело в специфике браузера. Что нужно сделать. C JavaScript я не особо дружу.

Спасибо.

(Отредактировано автором: 16 Апреля, 2010 - 17:42:22)



-----
ПОТЕРЯВ_СТРАХ_К_СМЕРТИ_МЫ_ОБРЕТАЕМ_ВЕЧНУЮ_ЖИЗНЬ... и голову без мозгов))))
 
My status
 Top
JustUserR
Отправлено: 16 Апреля, 2010 - 18:54:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Friendly Man пишет:
Помогите пожалуйста разобраться. Может дело в специфике браузера. Что нужно сделать. C JavaScript я не особо дружу.
Дело действительно в специфике браузера и это достаточно стандартное являние когда в FF что-то не работает ведь там урезанная версия JS (Еще одно очередное подтверждение Улыбка
Чтобы решить данную проблему можно промотреть несколько вариантов Как я понимаю в IE и Opera при нажатии на ссылки с определенными товарами они по очереди склыдваются в корзину и показываются там все вместе - а в FF показывается только последний товар который был выбран Вероятно это связано с особенностями стандартных кодировок в браузере - ведь когда вы добавляете очередное значение cookies вы используете фунции escape и unescape которые преобразуют данные в юникодную urlencoded-форму - и из-за несовпадения однобайтовой кодировки документа и многобайтового представления браузер может попросту не сохранять cookie и поэтому выводится только последний товар (Который напрямую передается в функцию)
Может быть еще одна причина по которой не работают cookie - например они могут обновиться только после перезагрузки основной статической HTML-страницы - в таком случае решением будет хранить данные о корзине в массиве (Для текущего сеанса страницы) и cookie (Для следующего сеанса) одновременно
Friendly Man пишет:
var value_coc_for_arr = item_and_price;
И вот эту переменную желательно объявить вне условия чтобы она была в контексте функции а не if-блока


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Friendly Man
Отправлено: 16 Апреля, 2010 - 22:05:48
Post Id



Новичок


Покинул форум
Сообщений всего: 47
Дата рег-ции: Апр. 2009  
Откуда: Россия - Армения, Москва-Ереван


Помог: 0 раз(а)




Большое спасибо что откликнулись на зов помощи. Знать бы ещё где подрихтовать надо...
А может быть unescape(document.coockie) в начале кода??? Сейчас попробуем.


-----
ПОТЕРЯВ_СТРАХ_К_СМЕРТИ_МЫ_ОБРЕТАЕМ_ВЕЧНУЮ_ЖИЗНЬ... и голову без мозгов))))
 
My status
 Top
JustUserR
Отправлено: 17 Апреля, 2010 - 13:25:33
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Friendly Man пишет:
Большое спасибо что откликнулись на зов помощи. Знать бы ещё где подрихтовать надо...
А может быть unescape(document.coockie) в начале кода??? Сейчас попробуем.
Пожалуйста! Решение кроссбраузерных задач всегда достаточно сложно и интересно
Видимл дело действительно в том что cookie не сохраняются и не считываются должны образом Попробуйте поступить одним из следующимх способов - или сама статическая HTML-страница сохраняется в кодировке utf-8 и на ней используются функции escape/unescape которые преобразуют символы в вид %uABCD - или страница сохраняется в однобайтовой кодировке и используются преобразовывающие функции которые приводят символы к привычному виду %AB - пример описан здесь http://xpoint[dot]ru/know-how/JavaSc[dot][dot][dot]myiySRusskimiBuk
Также можно попробовать использовать скрытый iframe - в котором проводить сохранение и считывание cookie с его последующим обновлением - в таком случае больше шансов что cookie точно запишутся в данный момент


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB