Javascript PHP&;AJAX不在表单元素中返回值
我正在尝试使用AJAX和PHP根据另一个下拉菜单的上一个选择来更新下拉菜单的选项 我的文档开头有以下脚本: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
<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
insideselect
中手动写入所需的选项来测试这一点,它运行正常,但由于某些原因,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;