【问题标题】:using Ajax with 3 consecutive drop down lists depending on eachother使用 Ajax 和 3 个连续的下拉列表,具体取决于彼此
【发布时间】:2013-01-11 05:44:36
【问题描述】:

祝大家平安,我是使用 Ajax 的新手,问题是,我有 3 个连接到数据库的下拉列表,第一个是“姓名”,第二个是“年龄”,第三个是一是“国”!因此,我已连接到数据库,并在第一个列表“名称”中从中检索数据,然后使用 Ajax,在选择第一个列表的任何选项并将它们放入名为“年龄”的第二个列表后,我已成功检索到匹配数据,问题是,当我使用与第二个名为“age”的列表完全相同的方式将匹配数据检索到名为“country”的第三个列表中时,它不起作用!所以请帮助我,因为我正在使用这个例子来学习 Ajax,然后应用到一个更大的实际项目中! 这是代码:- 首先,home.php 页面:-

<?php
include "config.php";
?>
<html> 
<head> 
<script type="text/javascript">
function agematch() {
 if (window.XMLHttpRequest) {
  xmlhttp = new XMLHttpRequest();
} 
 else {
 xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
 }

xmlhttp.onreadystatechange = function() {
  if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {

  document.getElementById('age').innerHTML = xmlhttp.responseText;
  }

} 
xmlhttp.open('GET', 'connection.inc.php?name='+document.ajax.name.value, true );
xmlhttp.send();

}

function countrymatch() {
 if (window.XMLHttpRequest) {
  xmlhttp = new XMLHttpRequest();
} 
 else {
 xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
 }

xmlhttp.onreadystatechange = function() {
  if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {

  document.getElementById('country').innerHTML = xmlhttp.responseText;
  }

} 
xmlhttp.open('GET', 'country.inc.php?age='+document.ajax.age.value, true );
xmlhttp.send();

}

</script>
</head>
<body> 
<form id="ajax" name="ajax" > 
Choose your name : <select name="name" id="name" select="selected"  onchange="agematch();"> <option>  </option> 
 <?php

   $query = "SELECT DISTINCT name FROM info";
   $result = mysql_query($query);
   while($row = mysql_fetch_array($result)){
   echo"<option  value ='".$row[0]."'> '".@$row[0]."'</option>";
                                }   
 ?>
</select>
Age : <select id="age" name="age" onchange="countrymatch();">  </select>
country : <select id="country" name="country"> <option> </option> </select>

</form>
</body>
</html>

现在,第一次 Ajax 调用的页面:-

<?php
include "config.php";
echo " <option>  </option> " ;
if(isset( $_GET['name']) ) {
  @$name = $_GET['name'];
  }

  $query = "SELECT age FROM info WHERE name = '".@$name."' "; 
  $result = mysql_query($query);
    while ($query_row = mysql_fetch_array($result)) {

      echo " <option  value ='".$query_row[0]."'> $query_row[0]</option> ";
      }

 ?>

现在,第三个下拉菜单的第二个 Ajax 调用页面:-

<?php
include "config.php"; 

  if (isset( $_GET['age']) ) {
     @$age=$_GET['age'];
   }     

  $query = "SELECT country FROM info WHERE name='".@$name."' AND age='".@$age."'  ";
  $result= mysql_query($query);
  while  ($query_row = mysql_fetch_array($result)) {

   echo " <option value = '".$query_row[0]."'> $query_row[0] </option> ";

  }

 ?>

如您所见,这里是代码,当然我是通过一个名为“config.php”的页面连接到数据库的,所以我希望您帮助我解决这个问题并将数据从数据库中检索到第三个下拉列表“国家”。 提前致谢!

好的,Musa 编辑在这里:-

function countrymatch() {
 if (window.XMLHttpRequest) {
  xmlhttp = new XMLHttpRequest();
} 
 else {
 xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
 }

xmlhttp.onreadystatechange = function() {
  if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {

  document.getElementById('country').innerHTML = xmlhttp.responseText;
  }

} 
var age = encodeUriComponent(document.ajax.age.value),
var name = encodeUriComponent(document.ajax.name.value),
xmlhttp.open('GET', 'country.inc.php?age='+age+'&name'+name, true );
xmlhttp.send();

}

还有:-

<?php
include "config.php";
  if (isset($_GET['age'], $_GET['name']) ) {
     @$age=$_GET['age'];
     @$name = $_GET['name'];
   }     

  $query = "SELECT country from info where name='".@$name."' AND age='".@$age."'  ";
  $result= mysql_query($query);
  while  ($query_row = mysql_fetch_array($result)) {

   echo " <option value = '".$query_row[0]."'> $query_row[0] </option> ";

  }

 ?>

我没有收到任何错误消息,我相信您的观点是正确的,但不幸的是,此解决方案不起作用!非常感谢你帮助我:)

【问题讨论】:

    标签: php sql ajax drop-down-menu


    【解决方案1】:

    您没有在第二个 ajax 请求中发送姓名,但您需要它用于数据库查询,因此您需要在 ajax 请求中发送姓名和年龄。另外你没有清理你的输入,你必须始终验证用户输入,我也建议不要使用 mysql_*

    此扩展自 PHP 5.5.0 起已弃用,将来将被删除。相反,应该使用MySQLiPDO_MySQL 扩展名。另请参阅MySQL: choosing an API 指南和related FAQ 了解更多信息。

    var age = encodeURIComponent(document.ajax.age.value),
    var name = encodeURIComponent(document.ajax.name.value),
    xmlhttp.open('GET', 'country.inc.php?age='+age+'&name'+name, true );
    
    if (isset($_GET['age'], $_GET['name']) ) {
        $age = $_GET['age'];
        $name = $_GET['name'];
        ...
    }     
    

    【讨论】:

    • @Mohammad99 您收到任何错误消息吗?使用新代码编辑您的问题
    • @Mohammad99 我有一个错字encodeUriComponent 应该是encodeURIComponent。还有你为什么改变sql查询?
    • 这是我想要的查询,我编辑了它,因为我第一次复制错了,不幸的是它仍然不起作用
    猜你喜欢
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-10
    相关资源
    最近更新 更多