辅助页面上的ajax查询


ajax query on secondary page

背景

我已经阅读了这里关于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。