аутентификация ajax в div - PullRequest
       1

аутентификация ajax в div

0 голосов
/ 28 марта 2011

Привет всем .. здесь вопрос от GJ в Голландии.

Я занят своим первым веб-программированием на AJAX и мне очень нравится идея, где загружается один php-файл (индекс) и оттуда может работать xmlhttprequestзагружать и обновлять содержимое div без обновления страницы.

Пока все работает хорошо, и около 4 разделов div получают различное содержимое в зависимости от того, какие кнопки меню вы нажимаете (все через функции getdata и xmlhttprequests).

Мой последний шаг - интегрировать дополнительный div аутентификации.Я пытаюсь реализовать хорошую систему jquery fade in fade out с помощью login.php с полями ввода для имени пользователя и пароля;process_login.php, который сравнивает данные с mysql и возвращает совпадение или нет;и, наконец, защищенная страница, на которой пользователь может выйти после успешной авторизации.Кажется, что эти страницы работают без сбоев, когда я загружаю файл login.php прямо в браузере .

Когда я использую getdata и xmlhttprequest в файле login.php, чтобы загрузить его в раздел div индекса.html ничего не работает , потому что кажется, что он больше не может использовать функции, которые объявлены на странице login.php .

Чтение ajax для чайников не дает мне никаких ответов, хотя яЯ уверен, что должно быть простое для понимания логическое объяснение этого факта.

Я не могу обдумать это ... пожалуйста, любая информация приветствуется ... приветствует

GJ

Ответы [ 2 ]

1 голос
/ 28 марта 2011

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 для формата данных и т. Д., Но это основная идея.

Да, вы всегда можете также просто включить все свои сценарии заранее :), однако загрузка по требованию - хорошая идея для любого нетривиального приложения, так что вы не загромождаете сценарии, которые вам не нужны. Сценарий входа в систему будет необходим только один раз за сеанс.

0 голосов
/ 28 марта 2011

Что касается того, почему ..... Я не знаю, почему это так себя ведет.

Однако, что касается исправления / обходного пути. Я нахожусь в подобной ситуации в настоящее время, когда я загружаю на страницах (на самом деле asp / jscript, а не php). Что я обнаружил, так это то, что скрипты, которые вы пишете на загружаемой странице, больше не доступны при загрузке через AJAX. У меня возникла та же проблема, если загружаемая страница содержит тег апплета или другой тип объекта html.

Решением этой проблемы является перемещение ваших сценариев во внешний файл на сервере, с которого ваша страница сможет к ним обращаться независимо от того, была ли она загружена AJAX в качестве панели или является отдельной страницей

Пример: (это, очевидно, jscript, а не php, но загрузка будет аналогичной.) Страница login.asp содержится в <head>

<script type="text/javascript" src="scripts.js"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...