Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   jQuery Ajax - потеря функций (https://javascript.ru/forum/jquery/66954-jquery-ajax-poterya-funkcijj.html)

Infinity178 20.01.2017 05:58

jQuery Ajax - потеря функций
 
Доброго дня!

Ситуация:
весь DOM построен на jQuery, все, абсолютно все работает на Ajax..
Итого получилось:
контроллер функций Require JS
библиотека jQuery
.. далее x кол-во плагинов (типа multi select, styler, fileapi и пр..)

Так вот, трудность оказалась так где не ждали..

Написал лайтовый debug к этой конструкции и нашлось следующее:
- привязанность библиотек и порядок загрузки Require JS соблюдает успешно - претензией нет
но! плагины типа: Form Styler (достаточно объемные) не успевают погрузиться как jQuery уже считываем .on(load) и запускает функцию тем самым вызывая ошибку...

Как справиться с подобным???

скажем так - закинуть некоторые файлы в кэш.. да решение, но первый заход получается ломанный в любом случаи..


Может есть что то типа:
если функция не найдена - рефреш файла.. ну или что то подобное..

laimas 20.01.2017 06:28

https://habrahabr.ru/post/182310/

Infinity178 20.01.2017 06:55

Цитата:

Сообщение от laimas (Сообщение 441542)

Привет.. спс за внимание, но это немного не то...

все скрипты подгружаются async..

И все идет ровно! Только

1.js
2.js
3.js
init.js
в init.js - вызываются 1,2,3 и фактически скажем 2 уже подгружен, но init срабатывает на on load, т.е. все загружено и уже после load - выдает false на функции расположенные 2 (через раз...)

laimas 20.01.2017 07:04

А другими путями кроме описанного как? Ну или изменяйте скрипты.

Infinity178 20.01.2017 07:15

проблема оказалось только в одном файле, ну на всякий случай поставил в цикл..
если в двух словах: тупо сделал REFRESH инициирующему файлу..

чуть больше деталей в решении:
- компрессия всех файлов (кроме инициирующего)
- асинхронная загрузка Require JS, с жесткой зависимостью..
- Debug, с условием:
--- если function === false, проверяем перебором наличие файла
-------- если файл есть, запускаем refresh инициатору
-------- если файла нет, подключаем повторно файл и запускаем refresh


Часовой пояс GMT +3, время: 08:18.