2010-04-22 88 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說的,你可能根本不需要這樣做。

相關問題