Отправить форму, используя JavaScript, работать в FF, но не в IE - PullRequest
2 голосов
/ 22 апреля 2010

У меня есть этот код.

Код ниже работает в Firefox, но не в IE

<?php // file: login_dfr.php ?>
<body>
<?php
$data = getLoginData($_SESSION['whoyouare']);
?>
<form name="frm_redirect_dfr" action="<?php echo $data['url']; ?>" method="POST"     id="frm_redirect_dfr" style="display: none;">
    <input name="DFRNet_User" value="<?php echo $data['username']; ?>" type="hidden" />
    <input name="DFRNet_Pass" value="<?php echo $data['password']; ?>" type="hidden" />
    <input name="tbllogin" value="login" type="hidden" />
    <input type="submit" value="submit" />
    </form>
    <script language="javascript" type="text/javascript">
    document.forms["frm_redirect_dfr"].submit();
    </script>
</body>

Я хочу, чтобы при доступе к странице пользователь сначала попытался получить данные для входа, отобразить их в форме и автоматически отправить форму с использованием javascript

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

<?php session_start(); ?>
<?php // file: login_frame.php ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org    /TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Wavinet</title>
</head>
<frameset rows="1,*" frameborder="no" border="0" framespacing="0">
<frame src="topFrame.php" name="topFrame" scrolling="No" noresize="noresize" id="topFrame" title="topFrame" />
<frame src="login_dfr.php" name="mainFrame" id="mainFrame" title="mainFrame" />
</frameset>
<noframes>
<body>This page contain frame</body>
</noframes>
</html>

Ответы [ 3 ]

1 голос
/ 22 апреля 2010

Ваш код на самом деле не имеет смысла, если я не понимаю его. Вы создаете форму полностью с информацией, уже доступной для PHP, и отправляете ее обратно в PHP. Нет причин, вы можете просто включить любой файл, на который указывает $data['url'], в свой скрипт и дать ему имя пользователя и пароль напрямую

0 голосов
/ 22 апреля 2010

Вам, вероятно, нужно дать IE время на визуализацию формы, прежде чем вы ее отправите.Так что с

<script language="javascript" type="text/javascript">
setTimeout(function() {
    document.forms["frm_redirect_dfr"].submit();
    }, 0) /* You may need a higher number here. If you do, start with 100 and go up. */
</script>

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

Причина, по которой это работает, в том, что это тип «доходности».Браузеры имеют тенденцию отдавать более низкий приоритет разрисовке элементов страницы, чем выполнение встроенного JavaScript.Это создает проблему для встроенного JavaScript, который должен взаимодействовать с DOM, поскольку нет очевидного способа ждать, пока браузер отобразит его.Этот трюк дает браузеру возможность выполнить рендеринг до того, как запустится больше JavaScript.

0 голосов
/ 22 апреля 2010

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

Возможно, ваша проблема в скрипте, который получает сообщение.Сделайте print_r($_POST);, чтобы помочь вам в отладке.

Но, как сказал Майкл Мрозек, вам, вероятно, вообще не нужно это делать.

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