Для правильного вопроса надо знать половину ответа
А в чём проблема то? Отсортируйте отрезки по координатам.
если xA > xB
или (xA == xB и yA > yB)
или (xA == xB и yA == yB и zA > zB)
то T := A, A := B, B := T
Для правильного вопроса надо знать половину ответа
У вас всё перемешано.
AJAX (Asynchronous Javascript and XML) - общий принцип фоновых запросов из браузера к серверу с обновлением информации без перезагрузки страницы.
XHR (XML HTTP Request) - способ выполнения фонового запроса в JavaSript.
Fetch - более новый способ выполнения фонового запроса в JavaSript.
SOAP (Simple Object Access Protocol) - протокол обмена информацией.
REST (Representational State Transfer) - общий принцип взаимодействия распределённых компонентов приложения.
Для правильного вопроса надо знать половину ответа
Возвращать то вы его возвращаете, вот только результат функции ничему не присваивается и, соответственно, не используется. Переменная errors живёт исключительно внутри formValidation.
Для правильного вопроса надо знать половину ответа
Скрипт никак не спрятать. Чтобы код выполнялся в браузере, он должен быть виден.
Если это токен к внешнему ресурсу и этот токен не привязан к домену, то он должен использоваться бэкендом, а не фронтом.
Для правильного вопроса надо знать половину ответа
JOIN - это декартово произведение таблиц. При отсутствии фильтра ON число строк результата JOIN'а будет равняться произведению числа строк таблиц, входящих в JOIN.
В вашем случае, если в users_groups_link есть несколько строк с одним group_id, то в результате JOIN'а для каждой из них будет создана отдельная строка результата.
Побороть можно, например, используя count(DISTINCT sl.salon_id).