Javascript PHP&;AJAX不在表单元素中返回值

Javascript PHP&;AJAX不在表单元素中返回值,javascript,Javascript,我正在尝试使用AJAX和PHP根据另一个下拉菜单的上一个选择来更新下拉菜单的选项 我的文档开头有以下脚本: <script> function show_districts(str) { if (str.length==0) { document.getElementById("districts_dropdown").innerHTML=""; return; } if (window.XMLHttpRequest) {// code for IE7+, Fi

我正在尝试使用AJAX和PHP根据另一个下拉菜单的上一个选择来更新下拉菜单的选项

我的文档开头有以下脚本:

<script>
function show_districts(str)
{
if (str.length==0)
  {
  document.getElementById("districts_dropdown").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("districts_dropdown").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","get_districts.php?q="+str,true);
xmlhttp.send();
}
</script>
。。。要创建此php文件,请执行以下操作:

<?php require_once("includes/connection.php"); ?>
<?php require_once("includes/functions.php"); ?>
<?php
$q = $_REQUEST['q'];

if($q = 'TBOOTH') {$id = 2;}

$result = mysql_query("SELECT dist.name FROM districts AS dist JOIN int_bd AS ibd ON dist.id = ibd.districts_id WHERE banners_id = '".$id."' GROUP BY dist.id ORDER BY dist.id ASC", $connection);
    if (!result) {
        die("Database query failed: " . mysql_error());
    }

    while ($row = mysql_fetch_array($result)) {
        echo '<option value="' . $row["name"] . '"';
        if($row["name"] == $district) { echo ' selected';} ;
        echo '>' . $row["name"] . '</option>';
    }

mysqli_close($connection);
?>

。。。它应该使用
将php文件中的值返回到此下拉菜单:

地区
如果
标记之外,但不在标记之内,则此功能非常有效。如能了解原因,将不胜感激


谢谢你的帮助!我修复了部分问题,让php代码生成整个
标记,如下所示:

<?php
$q = $_REQUEST['q'];
$id = "";

if ($q = 'TBOOTH') {
    $id = "2";
} else {
    if ($q = 'WIRELESS ETC') {
        $id = "3";
    }
}

echo '<select name="district" class="textbox short_field">
<option value=""></option>';

$query = "SELECT dist.name FROM districts AS dist JOIN int_bd AS ibd ON dist.id = ibd.districts_id WHERE banners_id = '".$id."' GROUP BY dist.id ORDER BY dist.id ASC";

$result = mysql_query($query, $connection);
    if (!result) {
        die("Database query failed: " . mysql_error());
    }

    while ($row = mysql_fetch_array($result)) {
        echo '<option value="' . $row["name"] . '"';
        if($row["name"] == $district) { echo ' selected';} ;
        echo '>' . $row["name"] . '</option>';
    }

mysql_close($connection);
?>

看起来您想重新填充select标记中的选项。首先,你不能把一个跨度放在那里。请遵守-
标签只能包含
标签

这就是你正在改变的

document.getElementById("districts_dropdown").innerHTML=xmlhttp.responseText;
那么,如果你以这个为目标,会发生什么呢

<select name="banner" id="banner" class="textbox short_field" onchange="show_districts(this.value)">

你可以选择

select
中应该是
选项
optgroup
。你不能把
span
粘在那里。为什么要这样做?因为php代码应该返回带有动态生成选项的
选项
标记。我通过在
span
inside
select
中手动写入所需的选项来测试这一点,它运行正常,但由于某些原因,php无法执行相同的操作。这是有效的:
District hello
除了php问题之外,您不能使用select标记来实现这一点。阅读规范“如果不在标签范围内,这很好用”-解决方案很明显。我知道这不会那么容易。谢谢你的帮助。到目前为止,这使我又向前迈进了一步。我刚用一个新问题更新了我原来的帖子。你能看一下吗?
echo'
现在没有id。它需要一个
echo'
document.getElementById("districts_dropdown").innerHTML=xmlhttp.responseText;
<select name="banner" id="banner" class="textbox short_field" onchange="show_districts(this.value)">
document.getElementById("banner").innerHTML=xmlhttp.responseText;