背景
我已经阅读了这里关于AJAX的几篇文章和教程,我已经让它在一个页面上运行得很好,但我仍然是使用AJAX的新手,所以我遇到了一个我不知道如何解决的问题。
我有我的主页,ajaxtest.php,其中包含一个下拉列表,代码为:
<a>
<?php
include('./db.php');
$PM = mysqli_query($con, "SELECT DISTINCT PMName FROM report WHERE PMname <> '' ORDER BY PMName ASC");
?>
<select name="PMName" onchange="showUser(this.value)">
<?php
while ($row = mysqli_fetch_row($PM)) {
$selected = array_key_exists('PMName', $_POST) && $_POST['PMName'] == $row[0] ? ' selected' : '';
printf(" <option value='%s' %s>%s</option>'n", $row[0], $selected, $row[0]);
}
?></select></a>
它拉动了这个功能:
<script>
function showUser(str) {
if (str !==".PM") {
if (str=="") {
document.getElementById("txtHint").innerHTML="";
return;
}
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
} else { // code for 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","getuser.php?q="+str,true);
xmlhttp.send();
}
</script>
将数据库中的选择发送到我的第二个页面,getuser.php.
然后,用户会看到用getuser.php的结果填充的初始页面的其余部分,其中包含我的大部分代码和用SQL信息填充的HTML表。
运行良好
问题
我的问题源于这样一个事实,即一旦(请原谅我没有技术术语)getuser.php被填充到ajaxtest.php内部的<div>
中,我就无法使用任何其他JavaScript或AJAX函数,或者整个页面只是刷新,就像我要从头开始重新加载ajaxtestphp一样,它会让我回到带有下拉菜单的初始空白屏幕。
在getuser.php上,在包围整个表的<form>
中,有一个提交按钮:
<form action="" method="POST" onsubmit="test()">
和
<input class="button" name="update"<?= $LineID ?>" type="submit" id="update" value="UPDATE">
这应该链接到我的JavaScript测试()函数,该函数简单地读取:
function test() {
alert("yo");
}
但当我点击按钮时,整个页面都会刷新,而不是执行这个功能。为什么会这样?
如果我手动转到localhost/getuser.php?q=John%20Doe
,而不是"在我的ajaxtest.php <div>
中加载此页面"并单击按钮,它会正常工作,我会弹出JavaScript警报。我在这里做错了什么?
尝试编辑函数test()
以返回错误
function test() {alert("yo"); return false}
并更改线路
<form action="" method="POST" onsubmit="test()">
进入
<form action="" method="POST" onsubmit="return test()">
现在它不应该刷新页面。onsubmit
中使用的函数需要返回true或false。