我正在使用对PHP文件的Ajax调用来从MySQL数据库获取数据并在HTML中填充选择选项。问题是选项中的重复项目,我不知道为什么。我在工作台中尝试了查询,它带回了我需要的东西。
PHP文件:
<?php
$q=$_GET["q"];
// open db connection code
$query = "select * from r2rtool.materialtype where type = 'FE' and tools like '%".$q."%'";
$result = mysql_query($query);
$option = "";
while($row = mysql_fetch_array($result))
{
$mat = $row["Material"];
$option.="<option value=\"$mat\">".$mat."</option>";
echo $option;
}
// close db connection
?>
Ajax功能:
function populatematerial(str)
{
if (str=="") {
document.getElementById("txtHint").innerHTML="";
return;
}
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","phpfile.php?q="+str,true);
xmlhttp.send();
}
答案 0 :(得分:6)
while($row = mysql_fetch_assoc($result))
{
$option .= "<option value=\"{$row[Material]}\">{$row[Material]}</option>";
}
echo $option;
答案 1 :(得分:1)
您需要做的就是将echo $option;
移出while循环,如下所示:
while($row = mysql_fetch_array($result))
{
$mat = $row["Material"];
$option.="<option value=\"$mat\">".$mat."</option>";
}
echo $option;
您应该在构建HTML之后输出HTML,而不是在构建它时输出。
答案 2 :(得分:0)
使用mysql_fetch_assoc
代替mysql_fetch_array
,因为数组会以数字形式返回值并命名两种格式,因此它会两次生成数据,
其中mysql_fetch_assoc
只返回数组作为数组的名称元素。
了解更多信息 试试
<?php
$query = mysql_query("some query ");
$row = mysql_fetch_array($row);
$assoc = mysql_fetch_array($row);
print_r ($row);
echo "<br>";
print_r ($assoc);
echo "<br>";
?>