Есть проблема, если одномоментно заполнить несколько полей в форме заказа (получатель, телефон, индекс, город, улица, регион и.т.д.)
Такое может случаться, например, при использовании сторонних доставок (Почта Росиии, СДЭК), которые при автокомплите города, одновременно заполняют несколько полей: поля города, индекса и области, либо же это вполне может произойти и просто, если соединение с интернетом нестабильно и одновременно на сервер уйдут несколько запросов, возможно такое может происходить при автозаполнении сохраненных полей браузером, типа подстановки имени и телефона. Когда происходит одновременно несколько запросов к order/add - видимо из-за конкуренции в итоге сохранится лишь одно, максимум 2 поля. Остальное перезапишется предыдущим значением.
Резюме / Summary
Скорей всего проблема в том, что при запросе к order/add перезаписывается вся сессия и получается тот запрос, который выполнился последним, он затрет значения параллельных запросов и поля не сохранятся.
Мы увидим в панели сетевых запросов, что ушло 4 запроса, все они вернули success.
Обновляем страницу и видим, что в лучшем случае будет заполнено лишь одно-два поля, а остальные пустые, т.к. перезатерлись.
Ожидаемое поведение / Expected behavior
Хотелось бы, чтобы все поля правильно сохранялись в заказ, независимо от других запросов, не мешая друг другу.
Может уважаемое сообщество разработчиков подскажет, как с этим можно бороться?
Сделать какую-то очередь запросов, чтобы они шли один за другим, но не просто по setTimeout, а по факту ответа.
Сообщение об ошибке / Error message
Есть проблема, если одномоментно заполнить несколько полей в форме заказа (получатель, телефон, индекс, город, улица, регион и.т.д.) Такое может случаться, например, при использовании сторонних доставок (Почта Росиии, СДЭК), которые при автокомплите города, одновременно заполняют несколько полей: поля города, индекса и области, либо же это вполне может произойти и просто, если соединение с интернетом нестабильно и одновременно на сервер уйдут несколько запросов, возможно такое может происходить при автозаполнении сохраненных полей браузером, типа подстановки имени и телефона. Когда происходит одновременно несколько запросов к order/add - видимо из-за конкуренции в итоге сохранится лишь одно, максимум 2 поля. Остальное перезапишется предыдущим значением.
Резюме / Summary
Скорей всего проблема в том, что при запросе к order/add перезаписывается вся сессия и получается тот запрос, который выполнился последним, он затрет значения параллельных запросов и поля не сохранятся.
Шаг для воспроизведения / Step to play
Я смог воспроизвести проблему на демо сайте https://minishop2.com/cart таким кодом в консоли браузера:
Наблюдаемое поведение / Observed behavior
Мы увидим в панели сетевых запросов, что ушло 4 запроса, все они вернули success. Обновляем страницу и видим, что в лучшем случае будет заполнено лишь одно-два поля, а остальные пустые, т.к. перезатерлись.
Ожидаемое поведение / Expected behavior
Хотелось бы, чтобы все поля правильно сохранялись в заказ, независимо от других запросов, не мешая друг другу.
Environment
Проверялось на версии https://minishop2.com/cart и на сайте с Minishop2 2.4.18-pl и modx 2.7.1
Может уважаемое сообщество разработчиков подскажет, как с этим можно бороться? Сделать какую-то очередь запросов, чтобы они шли один за другим, но не просто по setTimeout, а по факту ответа.