2010-04-22 95 views
2

我有这段代码。使用JavaScript提交表单,在FF中工作,但在IE中不工作

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

更新: 我忘了提,上面的代码是一个框架,大型机代码象下面这样:

<?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> 

回答

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运行之前完成一些渲染。

+0

感谢您的答案staticscan,但是当我尝试你的代码,它不起作用,动作URL仍然显示“你必须登录”页面。我将数字更改为5000. 我也尝试使用jquery,但它也不起作用 我的想法出现了一个新问题,即发送到操作URL的发布数据。我已经使用LiveHTTPHeader在Firefox上检查它,发送发布数据。我不知道如何在IE上调试HTTP头,因为没有用于IE的LiveHTTPHeader – Permana 2010-04-22 04:38:21

+0

好吧,所以你需要在服务器端代码中进行调试。首先,使用View Source来验证表单标签的动作参数是否转到了正确的URL。然后使用'print_r($ _ POST);退出;'确切地告诉你服务器正在发送什么。 – staticsan 2010-04-23 01:03:00

+0

表单数据已提交。发送POST数据,我只是使用fiddler – Permana 2010-04-29 03:06:37

1

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

0

这应该可以正常工作,假设生成的html不会因为缺少转义php变量。

您的问题可能在您的脚本收到帖子。请执行print_r($_POST);以帮助您进行调试。但是,就像Michael Mrozek说的,你可能根本不需要这样做。

相关问题