2011-07-11 68 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