使用javascript提交表单,在FF中工作但不在IE中工作

时间:2010-04-22 02:29:11

标签: php javascript html forms internet-explorer-7

我有这段代码。

以下代码在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自动提交表单

更新: 我忘记提到上面的代码在Frame上,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 个答案:

答案 0 :(得分:1)

你的代码没有意义,除非我误解了它。您正在生成一个完全包含PHP可用信息的表单,并将其提交回PHP。没有理由,您可以在脚本中包含任何文件$data['url']点,并直接为其提供用户名和密码

答案 1 :(得分:0)

这应该可以正常工作,假设生成的html没有因为你没有转义php变量的值而受到损害。

您的问题可能出现在收到帖子的脚本中。执行print_r($_POST);来帮助您进行调试。

但是,就像Michael Mrozek所说,你可能根本不需要这样做。

答案 2 :(得分:0)

在提交表单之前,您可能需要给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运行之前完成一些渲染。