Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.09.2015, 14:00
Профессор
Отправить личное сообщение для Эдди Посмотреть профиль Найти все сообщения от Эдди
 
Регистрация: 19.06.2010
Сообщений: 279

Насколько надежна parseInt?
Извиняюсь за глупый вопрос. Но очень важно.
Не хочется потом 200 кб скрипта переделывать.

В таблице заказа товаров выводятся значения в текстовом выражении.
Прежде чем поместить в корзину надо считать несколько числовых значений из строки.

Вижу два варианта:
1. Использовать, скажем, span и parseint 10.
2. В таблице использовать input-ы и с помощью css сделать их невидимыми, а следовательно, использовать $('#abc).val().

Что выбрать? Реально, не хочется потом все переделывать.

Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 03.09.2015, 14:44
Аватар для Sigizmund2012
Профессор
Отправить личное сообщение для Sigizmund2012 Посмотреть профиль Найти все сообщения от Sigizmund2012
 
Регистрация: 16.07.2014
Сообщений: 267

Эдди,
parseInt работает только если строка начинается с числа. Если вы делаете что-то типа:
parseInt($('span').text());

и в span окажется например   в начале, то всё посыпется. Инпут понадёжней как по мне.
Ответить с цитированием
  #3 (permalink)  
Старый 03.09.2015, 14:46
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Таблица Заказа, это по логике уже и должна быть Корзина, то что вне Корзины, это не заказы, это всего лишь предложения, список товаров.

Выбор товара, это либо 1, либо можно набирать любое произвольное его количество. При этом как сервис на клиенте можно сразу рассчитывать цену набранного, которую удобно держать под рукой, непосредственно в поле ввода, в котором набирается количество товара. Держать ради этого скрытые поля в формах не выгодно и накладно. При этом parseInt может и не потребоваться - "2" * "2" = 4, а вот "2" + "2" = "22"

Серверу же для помещения товаров в Корзину совсем не нужна его цена, он и без клиента ее знает, ему нужен идентификатор товара и его количество.
Ответить с цитированием
  #4 (permalink)  
Старый 03.09.2015, 15:18
Профессор
Отправить личное сообщение для Эдди Посмотреть профиль Найти все сообщения от Эдди
 
Регистрация: 19.06.2010
Сообщений: 279

Сообщение от laimas Посмотреть сообщение
Таблица Заказа, это по логике уже и должна быть Корзина, то что вне Корзины, это не заказы, это всего лишь предложения, список товаров.

Выбор товара, это либо 1, либо можно набирать любое произвольное его количество. При этом как сервис на клиенте можно сразу рассчитывать цену набранного, которую удобно держать под рукой, непосредственно в поле ввода, в котором набирается количество товара. Держать ради этого скрытые поля в формах не выгодно и накладно. При этом parseInt может и не потребоваться - "2" * "2" = 4, а вот "2" + "2" = "22"

Серверу же для помещения товаров в Корзину совсем не нужна его цена, он и без клиента ее знает, ему нужен идентификатор товара и его количество.
У меня все сложнее. Это не товары. Это услуги. Есть основные услуги, есть дополнительные.
Сначала клиент выбирает одну основную услугу (которая в строке таблицы), плюс к тому выбирает доп. услугу, если она нужна.
При клике на стоимости основной услуги я должен положить заказ в корзину (в БД - сессии не подходят).
Потом к этой услуге клиент может добавить другую услугу, и это добавится в один и тот же заказ, если услуги совпадают.
Ответить с цитированием
  #5 (permalink)  
Старый 03.09.2015, 15:21
Профессор
Отправить личное сообщение для Эдди Посмотреть профиль Найти все сообщения от Эдди
 
Регистрация: 19.06.2010
Сообщений: 279

Но дело не в этом.
Я уже решил, что сделаю как сделал.
Сначала предложение услуг. При выборе - записываю в БД.
Вопрос в том, как извлечь из строки таблицы числа, которые являются id заказа, данные для записи этих id в БД.
К тому же потом я дам возможность клиенту редактировать в корзине основные и дополнительные услуги.
Потому и файл js будет около пол мегабайта.
Кстати, еще вопрос, чем его сжать, поскольку обильно снабжен комментариями.
Пробовал уже не помню что - перестал работать.
Вы что используете?
Ответить с цитированием
  #6 (permalink)  
Старый 03.09.2015, 15:54
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Эдди
Сначала предложение услуг. При выборе - записываю в БД.
Вопрос в том, как извлечь из строки таблицы числа, которые являются id заказа, данные для записи этих id в БД.
К тому же потом я дам возможность клиенту редактировать в корзине основные и дополнительные услуги.
Потому и файл js будет около пол мегабайта.
Что можно сказать. Это как раз тот момент, когда неудачное представление данных порождает невероятных размеров код.
Ответить с цитированием
  #7 (permalink)  
Старый 03.09.2015, 15:59
Аватар для Sigizmund2012
Профессор
Отправить личное сообщение для Sigizmund2012 Посмотреть профиль Найти все сообщения от Sigizmund2012
 
Регистрация: 16.07.2014
Сообщений: 267

Сообщение от Эдди
Кстати, еще вопрос, чем его сжать, поскольку обильно снабжен комментариями.
Gulp + uglify https://www.npmjs.com/package/gulp-uglify
Ответить с цитированием
  #8 (permalink)  
Старый 03.09.2015, 20:12
Профессор
Отправить личное сообщение для Эдди Посмотреть профиль Найти все сообщения от Эдди
 
Регистрация: 19.06.2010
Сообщений: 279

Я все понимаю. Только однозначно можете мне посоветовать?
Инпуты сделать или выдергивать из span значения полей?
КОд я начал писать, когда еще в JS вообще не разбирался.
Сейчас для начала надо запустить работу. А потому буду лакировать и уменьшать код.
И я уже знаю, как.
Ответить с цитированием
  #9 (permalink)  
Старый 03.09.2015, 20:41
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Эдди
Только однозначно можете мне посоветовать?
Что именно?

Есть три типа корзин, в зависимости от того где ее данные хранятся:

1) в сессии - просто, и в случае если пользователь откажется и покинет магазин, о мусоре можно не беспокоится, он будет удален сборщиком мусора. В базу данные корзины переписываются только при оформлении заказа.

2) куки, тоже самое что и в сессии, но время жизни такой корзины может быть большим.

3) хранение в базе - такую корзину можно организовать только для регистрированных пользователей, и на ограниченное время.

В любом случае, корзина позволяет редактировать товары в ней, удаляя, добавляя, или вообще аннулируя все товары в ней. Другими словами какого-то промежуточного этапа между выбором товара или услуги и помещением его в корзину надобности нет. Выбор всегда можно оценить и в корзине, просчитать цену. Вы в реальном магазине выбирая товар не раскладываете же его предварительно на полках, и только потом в корзину.

Что касается Сначала предложение услуг. а потом При выборе - записываю в БД., а потом уже в корзину, то это вообще что-то непонятное. Если к примеру на страницах много товаров и различных, то как сервис я могу организовать закладки, а это не обязательно в базу писать, выковыривая потом этот мусор, ведь закладка это всего лишь запомнить идентификаторы выбора, а показать набранное в закладку, это вывести товары этих идентификаторов. Да если и не делать вторичный выбор, то можно и запомнить все содержание об этих товарах у клиента, и это никак не большой объем скрипта.
Но это хранение никоим образом не имеет отношения к корзине как таковой, это только намерения пользователя, а предложения, так это и есть все товары/услуги на страницах.

А данные необходимые серверу для того чтобы понять, что выбрано, так это типа:

<input name="product[12]" data-price="200" value=""> - и сервер получит в массиве под ключом 12, что является идентификатором товара, его количество. Цену 200 ему не надо, он ее как и все остальные данные о товаре может получить в базе. Эта цена нужна на клиенте, для расчета при наборе товара.

Тоже самое и в корзине, только помещая товара в корзину, в нее сразу помещают и цену, чтобы лишний раз не дергать базу.
Ответить с цитированием
  #10 (permalink)  
Старый 04.09.2015, 11:46
Профессор
Отправить личное сообщение для Эдди Посмотреть профиль Найти все сообщения от Эдди
 
Регистрация: 19.06.2010
Сообщений: 279

Это все понятно. Но Вы говорите об обычных магазинах с конкретными товарами.
У меня же немного другая ситуация. Можно сравнить ее с заказом автомобиля у производителя. С выборами опций.
Сначала клиент выбирает марку авто, помечая опции галками в чекбоксах.
Не регистрируясь.
Именно это мне надо, чтобы клиент проделал сначала все без всяких заморочек. А когда он накидал в корзину все, что ему нужно.
Просмотрел корзину, удалил лишнее, добавил необходимое, то он уже проделал работу.
И вот тогда он кликает на Заказать. И вот только тогда ему предлагается зарегистрироваться.
И он зарегистрируется именно потому, что уже проделал всю работу, и чтобы эта работа была проделана не зря.
А сессия к тому времени может и протухнуть.
Кстати, подумываю писать его ай-пи адрес также в бд.
Чтобы даже закрыв браузер, а потом снова его открыв и зайдя на страницу поиска, в корзине были выбранные им товары или услуги.

По себе знаю, что при выборе товара, когда вылазиит форма регистрации, в большинстве случаев я ухожу от заказа.

Насчет того, что писать надо только id товаров и услуг вопрос спорный.
Привожу аргументы:

Если не писать в БД стоимость, а она у поставщика изменится, то клиент будет неприятно удивлен, купив, скажем, айфон за 200 долларов, а когда войдет в личный кабинет, то этот айфон оказывается стоит уже 300 долларов.
Это тоже, как я считаю, ошибка интернет-магазинов.

Цену надо обязательно писать с предупреждением, что она действительна в течение стольких только часов или дней.
А потом по крону автоматически корректировать цену.

В чем здесь я ошибаюсь?

И последнее. Насколько я понял, еще недостаточно изучив JS, сессии - это не стезя этого языка. Это php. А мне надо, чтобы за весь период выбора услуг/товаров и опций к ним страница ни разу не перезагружалась. Можно, конечно аяксом присобачить сессию. Но я уже сказал выше, что пройдет 25 минут, и она протухнет. Или клиент закроет браузер, или свет у него отключится.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оптимизация кода 4ipset Общие вопросы Javascript 11 28.09.2014 15:04
9-ти разрядная матрица Mersedes! Ваши сайты и скрипты 4 09.08.2012 14:17
вывести 0 через parseInt zloctb Общие вопросы Javascript 7 03.02.2012 00:24
Насколько верно использовать присваивание как логическую операцию? ritium Общие вопросы Javascript 10 24.10.2011 17:38
При копировании текста со страницы автоматом присоединять строку - насколько сложно? javascript_pupil Общие вопросы Javascript 3 04.01.2011 22:25