Всем привет!
Первый скрипт выполняет передачу данных ассинхронно.
При клике на кнопку начинает выполняться второй скрипт, который считывает результат выполнения первого скрипта, но первый скрипт не закончил свое выполнение на 100%. В результате второй скрипт считал не полную информацию
Есть для такой ситуации что-нибудь аля $(document).ready()?
1. Serhio - 07 Мая, 2015 - 16:24:39 - перейти к сообщению
2. Sail - 07 Мая, 2015 - 16:26:36 - перейти к сообщению
Serhio, инициализация выполнения первого скрипта и кнопка для второго - на одной "страничке" находятся?
Ну и никто не мешает где-нить хранить статус актуальности данных.
Ну и никто не мешает где-нить хранить статус актуальности данных.
3. Serhio - 07 Мая, 2015 - 16:30:21 - перейти к сообщению
Sail пишет:
Serhio, инициализация выполнения первого скрипта и кнопка для второго - на одной "страничке" находятся?
Ну и никто не мешает где-нить хранить статус актуальности данных.
Ну и никто не мешает где-нить хранить статус актуальности данных.
На одной! Статус актуальных данных хранить можно в БД, никто не мешает, только это не к этой задаче комментарий, если я вас правильно понял.
4. Sail - 07 Мая, 2015 - 16:35:36 - перейти к сообщению
Serhio пишет:
На одной!
Во-первых, можно сделать недоступной для нажатия кнопку вызова второго скрипта, пока не получите подтверждения выполнения первого.
Во-вторых, всё равно при выполнении второго скрипта надо проверять статус актуальности данных, подготовленных первым скриптом.
Ну и если тот пишет в БД, можно, например, в рамках одной транзакции выполнять все требуемые обновления и тогда второй скрипт будет читать хоть и устаревшие, но все данные, которые были актуальны на момент до запуска первого скрипта).
(Добавление)
PS: и ещё есть Объект deferred
5. Serhio - 07 Мая, 2015 - 16:48:28 - перейти к сообщению
Sail пишет:
Во-первых, можно сделать недоступной для нажатия кнопку вызова второго скрипта, пока не получите подтверждения выполнения первого.
Во-вторых, всё равно при выполнении второго скрипта надо проверять статус актуальности данных, подготовленных первым скриптом.
Ну и если тот пишет в БД, можно, например, в рамках одной транзакции выполнять все требуемые обновления и тогда второй скрипт будет читать хоть и устаревшие, но все данные, которые были актуальны на момент до запуска первого скрипта).
(Добавление)
PS: и ещё есть Объект deferred
Serhio пишет:
На одной!
Во-первых, можно сделать недоступной для нажатия кнопку вызова второго скрипта, пока не получите подтверждения выполнения первого.
Во-вторых, всё равно при выполнении второго скрипта надо проверять статус актуальности данных, подготовленных первым скриптом.
Ну и если тот пишет в БД, можно, например, в рамках одной транзакции выполнять все требуемые обновления и тогда второй скрипт будет читать хоть и устаревшие, но все данные, которые были актуальны на момент до запуска первого скрипта).
(Добавление)
PS: и ещё есть Объект deferred
Ага, спасибо большое!
Видимо я совсем не знаком с проверкой статуса актульности данных. Как это делается?
Кстати первый пункт тоже интересен пример каким методом вы это сможете сделать?
6. DeadCowsDontMoo - 15 Мая, 2015 - 17:48:50 - перейти к сообщению
Sail пишет:
можно сделать недоступной для нажатия кнопку вызова второго скрипта, пока не получите подтверждения выполнения первого.
Напиши как или ссылочку...
7. Sail - 15 Мая, 2015 - 20:00:28 - перейти к сообщению
DeadCowsDontMoo пишет:
Напиши как или ссылочку...
Sail пишет:
можно сделать недоступной для нажатия кнопку вызова второго скрипта, пока не получите подтверждения выполнения первого.
Напиши как или ссылочку...
Самое простое: jquery атрибут disabled
8. MAXUS - 16 Мая, 2015 - 08:43:08 - перейти к сообщению
Serhio пишет:
Всем привет!
Первый скрипт выполняет передачу данных ассинхронно.
При клике на кнопку начинает выполняться второй скрипт, который считывает результат выполнения первого скрипта, но первый скрипт не закончил свое выполнение на 100%. В результате второй скрипт считал не полную информацию
Есть для такой ситуации что-нибудь аля $(document).ready()?
Первый скрипт выполняет передачу данных ассинхронно.
При клике на кнопку начинает выполняться второй скрипт, который считывает результат выполнения первого скрипта, но первый скрипт не закончил свое выполнение на 100%. В результате второй скрипт считал не полную информацию
Есть для такой ситуации что-нибудь аля $(document).ready()?
1. А насколько, в принципе, оправдано наличие кнопки, которая запускает второй скрипт?
1.1 Можно ведь инициировать запуск второго скрипта после того, как выполнится первый. Даже при асинхронном запросе.
1.2 Ну, или по завершению первого скрипта создавать объект с полученными данными, а по нажатию на кнопку второго скрипта проверять наличие этого объекта и запускать второй скрипт только если этот объект существует.
2. А кнопку при генерации рисуй сразу с атрибутом disabled, а по выполнению первого скрипта удаляй этот атрибут. Только в этом случае см. п.1