【问题标题】:Submit form using javascript, work in FF but not in IE使用 javascript 提交表单,在 FF 中工作但不能在 IE 中工作
【发布时间】:2010-04-22 02:29:10
【问题描述】:

我有这个代码。

下面的代码在 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>

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 感谢 staticscan 的回答,但是当我尝试您的代码时,它不起作用,操作 URL 仍然显示“您必须登录”页面。我将数字更改为 5000。我也尝试使用 jquery,但它也不起作用 一个新问题出现在我的脑海中,是发送到操作 URL 的帖子数据。我已经使用 LiveHTTPHeader 在 Firefox 上检查了它,发送了帖子数据。我不知道如何在 IE 上调试 HTTP Header,因为 IE 没有 LiveHTTPHeader
      • 好的,所以您需要在服务器端代码中进行调试。首先,使用查看源代码来验证表单标签的操作参数是否指向正确的 URL。然后使用print_r($_POST); exit; 告诉您服务器正在发送的确切内容。
      • 表单数据已提交。 POST 数据已发送,我只是使用 fiddler 进行检查
      • fiddler 告诉您数据已发送——您没有检查服务器上的 PHP 代码正在获取什么。如果我的车有加速问题,我要做的不仅仅是检查踏板是否拉动油门拉线。
      【解决方案3】:

      这应该可以正常工作,假设生成的 html 没有因您缺少转义 php 变量的值而受到破坏。

      您的问题可能出在您收到帖子的脚本中。做一个print_r($_POST);来帮助你调试。

      但是,正如 Michael Mrozek 所说,您可能根本不需要这样做。

      【讨论】:

        猜你喜欢
        • 2010-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-09
        • 1970-01-01
        • 2015-02-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多