Показать сообщение отдельно
  #6 (permalink)  
Старый 25.02.2017, 17:20
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Понятно. Ну зачем тогда опрашивать сервер?

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

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

Такое - document.querySelector('[name="vidlesov"]:checked')||{value : "x"}, конечно не серьезно, хотя бы уже потому, что есть значение по умолчанию.

value="lrsp30", value="chess", value="yes", ... - это совсем плохо. Как говорят математики - "Мы можем описать цифрами все что угодно". У цифр в отличии от строк есть есть одна особенность - с ними работать легче. Держать данные на сервере в виде "lrsp30", "chess" никуда не годится, если данные описывают набор свойств. Данные хранят в базе, и для подобных наборов (если они фиксированы) в ней существует удобный тип - ENUM. В описаниях набора, это строки, а во внутреннем представлении, это числа. Форма принятая от клиента подлежит обязательной проверке, а зная, что тип ожидаемых данных это integer, даже простейшими операциями легко проверить форму. С набором же "lrsp30", "lrsp40", "lrsp60", ... придется попотеть.

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