Здравствуйте! Часть страницы админки приходится обновлять посредством ajax, в том числе бывает, что добавляются новые функции javascript при таком обновлении. Но почему-то попытки их вызвать приводят к ошибке undefined. Если эти же функции прописать сразу в код страницы, то они вызываются нормально. Но функции надо формировать динамически. Не подскажете, что можно сделать, чтобы они вызывались?
Ответ
Но почему-то попытки их вызвать приводят к ошибке undefined. Если эти же функции прописать сразу в код страницы, то они вызываются нормально. Здесь может только и только одна проблема - ОБЛАСТЬ ВИДИМОСТИ Если эти функции прописать в код - скорее всего вы прописываете их в ту же область видимость и следовательно они будут доступны оттуда на прямую. "Чтобы они вызывались", нужно прежде всего: 1) Убедится на все 100% что файл который подключается "динамически", дейтсвительно подключился и не содержит синктаксических ошибок, которые могут вызывать фатальную отсановку скрипта. Это просто, для этого, запишите что-нибудь в тот файл и вызовите ( = стэнд алон тест), например вот так: Файл: test.js alert('OK. Works'); // все остальное.... внизу Основной файл: Если после включения выведет алерт, то значит проблем с подключением скрипта не было. Если не выведет - то вы все правильно поняли - не может по каким-то причинам подключить скрипт. Но функции надо формировать динамически. Если под "формировать" вы имеете ввиду создавать, а не подключать, то это просто УЖАС. И если это все еще генерируется через серверный язык... О_о Предназначения функций/классов нужно строго разделять. Одна функция не должна делать/знать много, она должна выполнять конкретно ОДНУ поставленную задачу. Золотое правило хорошего кода Не миксуйте JavaScript с HTML Не миксуйте JavaScript c серверным языком, таким так PHP, Python итд На заметку: Подобные проблемы (с областью видимости в том числе) будут возникать и в дальшейнем, до тех пор пока вы не: Почитаете что такое SOLID принципы MVC/Dependecy Injection (P.S это также касается JS, не только PHP) В хорошо оформленном веб-приложении передача данных происходит, не "создаванием" динамически, а передачей переменных через XML/JSON посредством AJAX Возращаясь к вопросу Посколько в вопросе нет примеров/сэмлов кода, то придется отвечать аналогично - догадываясь в предположениях. 1) Протестируйте что файл действительно включается 2) Убедитесь что эти функции - они глобальные, а не приватные методы класса.
Комментариев нет:
Отправить комментарий