2011-07-11 214 views
0

我有點迷路,試圖解決這個錯誤,請裸露在我身邊。當我單擊「提交」按鈕時,頁面似乎會刷新,並且沒有顯示假定讀取「已完成」或「未」的消息。我添加了一些Ajax函數來動態地爲MySQL數據庫中的信息填充一些下拉列表。點擊事件只是刷新頁面?

問題:爲什麼我的網頁沒有提交,它只是'提神'?(後添加的Ajax功能和填充從PHP文件下拉列表)用於填充材料下拉

<SCRIPT type="text/javascript"> 
function populatematerial(str) 
{ 
    if (window.XMLHttpRequest) 
    { 
    // IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp=new XMLHttpRequest(); 
    } 

    else 
    { 
    // IE6, IE5 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    xmlhttp.onreadystatechange=function() 
    { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
     document.getElementById("txtHint").innerHTML=xmlhttp.responseText; 
     } 
    } 

    xmlhttp.open("GET","getmaterial.php?q="+str,true); 
    xmlhttp.send(); 
} 

<form name='form1' method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
<table border="0" width="100%" id="table1"> 
    <tr> 
     <td width="144">DB Username</td> 
     <td><input type="text" name="dbusername" size="32"></td> 
    </tr> 
    <tr> 
     <td width="144">DB Password</td> 
     <td><input type="password" name="dbpassword" size="32"></td> 
    </tr> 
    <tr> 
     <td width="144">Tank Type</td> 
     <td><select name="tanktype" id="tools" onChange="populatematerial(this.value)"> 
     <option></option> 
     <option value="Metal">Metal</option> 
     <option value="Rinse">Rinse</option> 
     </select> 
     </td> 
    </tr> 
    <tr id="material_show" style="display:none;"> 
     <td width='144'>Material</td> 
     <td> 
     <select size='1' name='material' id="txtHint"> 
     </select> 
     </td> 
    </tr> 
</table> 
<p><input type="submit" value="Submit" name="result" ></p> 

<?php 
if (isset($_POST['result'])) 
{ 
session_start(); 

// check user id and password 

if (!authorized($dbuser1,'#####')) { 
    echo "<h2>You are not authorized. Sorry.</h2>"; 
    // exit to different page 
} 

// open database connection 

// upload some data via $submitquery 

mysql_query($submitquery) or die('UNABLE TO SUBMIT DATA'); 
echo "<b>Submit Successful</b><p>"; 

// close database connection 

?> 

PHP文件:

<?php 
$q=$_GET["q"]; 

// open database connection 

$query = "select * from r2rtool.platingmaterialtype where type = '".$q."'"; 
$result = mysql_query($query); 

$option = ""; 

while($row = mysql_fetch_array($result)) 
{ 
    $option.="<option value=\"{$row['Material']}\">{$row['Material']}</option>"; 
} 
echo "<option value='0'></option>"; 
echo $option; 

// close database connection 
?> 
+0

在附註中,$ _SERVER ['PHP_SELF']可能會爲XSS攻擊留下開口。看看這篇文章:http://www.mc2design.com/blog/php_self-safe-alternatives – jwatts1980

+0

@ jwatts1980這是在一個安全的內部網絡沒有公共訪問。 – TheRealDK

+0

真的只是刷新頁面嗎?快速檢查方法是在提交後實際刷新頁面,以查看瀏覽器是否警告您重新發布數據。或者點擊提交,啓動提琴手或IE的網絡分析器並觀察網絡流量。 – gilly3

回答

1

點擊表單中的提交按鈕將提交該頁面。如果你不希望這樣的事情發生,你必須阻止它明確處理form.onsubmit事件,並取消該事件:

document.forms.form1.onsubmit = function(e) 
{ 
    e = e || window.event; 
    if (e.preventDefault) e.preventDefault(); 
    e.returnValue = false; 

    // Do something else instead here 
} 

您也可以取消提交按鈕的單擊事件:

document.forms.form1.result.onclick = function(e) 
{ 
    e = e || window.event; 
    if (e.preventDefault) e.preventDefault(); 
    e.returnValue = false; 

    // Do something else instead here 
} 
+1

你也可以直接從onsubmit函數本身返回false。 – Endophage

+0

感謝您的回覆。我確實想提交該頁面。我的問題是,它沒有提交頁面,只是「刷新」頁面。我知道在Ajax的某個地方存在問題,因爲它在我改變爲動態填充之前就工作了。 – TheRealDK

+0

@TheRealDK - 抱歉,您的帖子標題和AJAX代碼一起是我的紅鯡魚。我想我現在理解你的問題了,但我擔心我不是PHP大師,也不會幫忙。 – gilly3

1

除了gilly3的回答,您還可以在按鈕的onclick事件中返回false。

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title>Untitled Page</title> 
</head> 
<body> 
    <form> 
     <input type="submit" onclick="return false;" value="Click me" /> 
    </form> 
</body> 
</html> 
+0

我想要頁面提交。我不知道爲什麼它現在不提交。它只是清除領域和刷新頁面,我檢查數據是否上傳,沒有什麼是在數據庫中,沒有打印'沒有提交數據'或'提交成功' – TheRealDK

+0

好吧,我猜你在使用ajax時,你應該從JS調用ajax服務,不應該刷新頁面。據我的理解你的按鈕應該調用ajax函數,不應該回發或刷新。我的建議是停止提交表單,而不是讓它調用你的Ajax。 – SaravananArumugam