Вызов AJAX не выполняет функцию JavaScript. Зачем? Работа вокруг? - PullRequest
0 голосов
/ 28 апреля 2011

Я * POST * в сценарии входа в PHP через вызов AJAX. В случае успеха мне нужно вызвать функцию JavaScript loggedIn(). Я пытался распечатать его ...

<script type="text/javascript">loggedIn();</script>

... как .innerHTML элемента div, а также попытка события onload="" для тега div. Ни один из методов не позволил мне вызвать функцию JavaScript. Я могу напечатать письмо внутри div и выполнить его на событии onclick="", но все, от чего я пытаюсь избавиться, на самом деле заключается в том, чтобы нажимать что-либо. По сути, я хочу перенаправление header("...") (которое также не будет работать).

Во-первых, кто-то может объяснить, что на самом деле происходит? Моя ставка на асинхронную природу AJAX. Во-вторых, кто-нибудь знает работу вокруг, я мог бы использовать для обновления страницы после успеха?

Спасибо, как всегда, Z @ K!

Ответы [ 4 ]

2 голосов
/ 28 апреля 2011

Добавление части куска javascript в div не приведет к его автоматическому запуску.Такая вещь работает только во время генерации страницы.Вам нужно было бы определить функцию перед обработкой, чтобы они выполняли простой вызов loggedIn() в вашем обработчике ajax, когда он получает уведомление об успехе от сервера.

0 голосов
/ 11 мая 2011
// Create a callback handler
xmlHttp.onreadystatechange = function () {
    // readyState == 4 | The request is complete
    // status == 200 | Request completed successfully.The page is found and displayed.
    if ( xmlHttp.readyState == 4 && xmlHttp.status == 200 ) {
        if (xmlHttp.responseText == "SUCCESS") {
            document.location.href = redirect_url;
        } else {
            var elemObj = document.getElementById(div_id);
            elemObj.innerHTML = xmlHttp.responseText;
        }
    }
}

В моем обычном обработчике обратного вызова я добавил ...

        if (xmlHttp.responseText == "SUCCESS") {
            document.location.href = redirect_url;
        }

Поскольку HTML - это строка, а "SUCCESS" - это строка, мне действительно не нужно было делать ничего другого, кромепроверьте результаты действия входа в систему для «УСПЕХА».Затем используйте document.location.href, чтобы перенаправить страницу на соответствующий URL.

Это прекрасно работает для моего приложения.Спасибо всем за ваш вклад!

~ Z @ K!

0 голосов
/ 29 апреля 2011

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

Ваша домашняя страница (index.php) может включать в себя форму, содержащую имя пользователя, поля пароля и кнопку для отправки формы. Index.php может содержать только экран входа в систему, или форма может быть небольшим вариантом на стороне.

а) Пользователь вводит свое имя пользователя и пароль и нажимает кнопку входа. Затем данные отправляются на сервер по URL-адресу, указанному в теге формы.

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

в) Если пользователь и пароль приемлемы, переменные сеанса сохраняются, и создается экран «Пуск». Если нет, экран входа в систему генерируется снова, с сообщением об ошибке (которое не признает, что это неправильно).

d) Поскольку код существует, сеанс сохраняется, и сгенерированный экран отправляется в браузер (автоматически).

e) Все страницы, которые должны быть защищены входом в систему, должны выполнить session_start () и представить экран входа в систему, если флаг logged_in не установлен. Простой способ сделать это - перенаправить на домашнюю страницу.

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

Когда AJAX полезен, вам нужно отправить данные на сервер для хранения в случае сбоя клиента. AJAX также полезен, когда клиенту нужны дополнительные данные после ввода данных пользователем. Например, при оформлении заказа пользователь вводит свою страну, а затем страница получает почтовые расходы с использованием AJAX.

0 голосов
/ 28 апреля 2011

Посмотрите на jQuery и его функцию $ .ajax (). Он сделает именно то, что вы ищете, с помощью обработчика onSuccess.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...