Javascript, загруженный через ajax, не становится частью окна. Вы должны явно выполнить его (например, используя eval
). Нет прямого решения этой проблемы, поэтому вам нужно придумать модель для вашего приложения, чтобы узнать о ресурсах, которые необходимы для того, что оно загружает через ajax.
Лучший способ сделать это - создать соглашение для всего приложения - например, установите перекрестную ссылку на страницы и файлы сценариев и используйте $.getScript
для их загрузки по требованию. В идеале вы должны проверить, загружен ли ресурс, прежде чем пытаться загрузить его снова.
Вот простая идея, которую вы можете использовать. В выводе вашего login.php
добавьте тег вверху, например,
<span id="script" style="display:none">login,/scripts/login.js</span>
Затем после вызова ajax, который загружает страницу, сделайте что-то вроде этого:
data = $('#wrapper').find('#script').html().split(',');
if (!window[data[0]]) {
$.getScript(data[1]);
}
Итак, в основном вы передаете некоторую информацию в HTML, которую загрузчик использует, чтобы выяснить, что ему нужно. Первый параметр - это пространство имен, поэтому вы можете проверить, загружен ли он уже. 2-й путь к сценарию.
Вы можете конкретизировать это, чтобы учесть более одного сценария, использовать JSON для формата данных и т. Д., Но это основная идея.
Да, вы всегда можете также просто включить все свои сценарии заранее :), однако загрузка по требованию - хорошая идея для любого нетривиального приложения, так что вы не загромождаете сценарии, которые вам не нужны. Сценарий входа в систему будет необходим только один раз за сеанс.