Словом, я наконец понял что вы не понимаете, что $.ajax по умолчанию является асинхронным вызовом, и считаете что success должен вызываться внутри каждой итерации, а не после того как вы уже пробежались по циклу.
@wkololo_4ever, вам стоит отдохнуть и отвлечься. Мне просто лень писать одно и то же, получается какая-то рекурсия. Я даже не понимаю что именно вводит вас в заблуждение.
- вы вызываете вашу функцию GetNewTelephone
- делаете выборку по классу нужных эллементов на странице
- обходите эллементы в цикле
- отправляете запрос к серверу
- выходите из функции
Ответ от сервера, то что вы в success в настройках запроса прописысваете, будет вызываться столько раз, сколько итераций прошел цикл (при условии что все запросы успешны). Причем вызываться этот код будет уже после того, как вы выйдете из функции GetNewTelephone. А если быть точнее, вы в вашем цикле только создаете запрос, как только вы его создали цикл переходит на следующую итерацию не дожидаясь завершения запроса. Собственно для этого нам и нужно определять обработчик в поле success, для этого придумали обещания.
Если вы хотите, что бы в цикле новая итерация начиналась только по завершению запроса, то вам нужно выставить опцию async: false в настройках запроса. Но сразу скажу что это не правильно. Выполнять несколько запросов паралельно намного быстрее, и нужно учиться жить с асинхронным поведением.
предположим что number.length равно 4-ем. Тогда, во время прохождения по циклу, мы вызываем 4 запроса. То что вы задаете в success, это функция, которая будет вызвана, когда успешно выполнится запрос. То есть на КАЖДЫЙ запрос будет вызываться эта функция. Итого у нас 4 запроса, 4 раза вызывается функция.
@wkololo_4ever, естественно. success Будет вызываться при каждом успешном ajax запросе. То есть number.length раз. Если вам нужно произвести какие-то действия когда все запросы отработают, то можно использовать обещания ($.ajax возвращает обещание о том, что функция выполнит что-то, обещания можно объединять в массивы и ждать когда все выполнится).
@wkololo_4ever, ну тогда опять же, в чем проблема? У вас в любом случае получается что на каждую запись нужно сделать ajax запрос, что значит что все происходит именно так как надо.
В случае если у вас в data Только один элемент, код выполнится один раз на каждую итерацию внешнего цикла, то есть number.length раз. Соответственно и ajax запросы будут вызываться столько же раз, и success в них так же будет вызываться для каждого сделанного запроса.
Или вам нужно объединить результаты всех запросов? Вы объясните толком тогда что не так.
ну предположим что первый фрагмент составляет 25% всего расстояния, значит нам нужно пройти по второму фрагменту еще 10%. Второй фрагмент составляет 20% от всего расстояния, и мы получаем пропорцию:
10% / x = 20% / длина_фрагмента
x тут наше искомое расстояние, которое мы должны пройти по фрагменту. Зная длину гипотенузы и угл найти катеты, а следовательно координаты не составляет труда.
@zelenin, если честно даже не знаю что вам показывать. Обычный RBAC из рецептов в wiki yii, разве что все роли имели иерархию и собирались при инициализации. Это собственно единственное отличие от других примеров. А так все стандартно.
p.s. на yii это все было года полтора назад, я на нем сейчас активно уже и не пишу. Только один проект на суппорте остался, а так только symfony и в последнее время все больше silex.
Только в промежуточный сервис и нужно выносить. В модели проверкам на доступ делать нечего. Ровно так же как в модели нечего делать и валидации... но это же yii...
А то что в контроллере за счет этого вырастает количество скучного и тупого хлама дублирующегося, так они для того и нужны. Но выносить проверки может ли пользователь делать то-то или то-то однозначно стоит вынести в сервисный слой.
сумма длин сегментов = 100%, из этого находим какую долю от 100 занимает длина нашего сегмента. Таким образом мы можем определить, относительно какого сегмента нам нужно располагать объект.
Опять же, зная что нам нужно расположить объект на расстоянии 35% от начала длины линии, мы можем посчитать долю расстояния от начала фрагмента (обычные пропорции). Зная точку начала фрагмента и угл, мы можем расчитать координаты объекта (простейшая триготометрия).
@ape364, в случае если время жизни нашего токена истекло, апишка должна ругаться ошибкой 401 not authorized. В этом случае на стороне клиента мы можем обработать эту ситуацию - отправляем запрос на продление жизни токена (по сути выделение нового), заменяем у себя токен и старый хэш на новый заменяем для возможности и потом продлить время жизни токена, ну и повторяем запрос.
Если при получении нового токена сервер его не дал, значит у нас не правильный хэш и мы должны попросить пользоваться авторизоваться.
@metamorph, позавчера добавлял именно это разделение прав. Возможность редактировать основную информацию заказа для группы пользователей, без возможности удаления. Так же есть разделение на регионы и т.д. До этого где-то месяца 4 назад на другом проекте схожее разделение прав понадобилось, причем изначально не предполагалось.