如何根据不同的下拉选项更改下拉值

时间:2014-02-21 16:07:43

标签: java javascript php

我在php页面中加载了一个servlet 这是我的php页面:reviewing.php

if(isset($_GET['x'])){
    $x = $_GET['x'];
}else{
    $x = '';
}

$site = $_SERVER['SERVER_NAME'];

if(isset($_GET['id'])){
    $Id = "id=".$_GET['id'];
}else{
    $Id = "";
}

$handle = fopen("http://".$site.":8080/Apps/reviewing.php?$Id", "r"); 

$contents = '';

while (!feof($handle)) {

 $contents .= fread($handle, 8192);

}

fclose($handle);

echo $contents;

你可以看到我的php页面加载了一个servlet。 servlet是进程发生的地方。它还包括servlet中的JSP和html页面。

我需要能够在更改另一个下拉列表的选项时更改下拉列表的值。它们都是单独的mysql查询,但只有在下拉列表发生变化时才需要运行第二个查询。我这样做的原因是我可以在dropdown2查询中将dropdown1的值用作WHERE

我试过像

这样的东西
  function reload(form)
  {

      var ID = form.agent.options[form.agent.options.selectedIndex].value;

      return ID;
  } 

此功能进入<select onchange="reload(this.form);"> 然后我想使用ID来运行下一个查询

<select>
//javascript
if(isset(reload())){
   //JAVA
   run query here WHERE id = ID;

    while(rs.next()){
      outn.print("<option>" + rs.getString("value") + "</option>");
    }
}
</select>

这就是我设想的方式。另一种选择是在reload()函数中使用它

self.location='http://exmaple.com/reviewing.php?x=blah&ID=blah;

但我不想继续重新加载页面。这是低效的。

1 个答案:

答案 0 :(得分:1)

那么你应该写下你的程序如下:

  1. 处理select元素onchange事件

    • 在select-element onchange-attribut(就像你做的那样)
    • with JS
    • with jQuery
  2. 在此处理程序中,您可以获得所选索引

  3. 用它来获取id
  4. 向php文件发送ajax请求以从ID获取数据,其id为POST数据
  5. 使用db的数据发回RESPONSE(可能你应该使用json)
  6. 使用“响应”填写您的选择
  7. 这是一个小代码示例:

    HTML

    <select id='select1'>
        <option id='option_1' value='1'>Option 1</option>
        <option id='option_2' value='2'>Option 2</option>
        <option id='option_3' value='3'>Option 3</option>
        <option id='option_4' value='4'>Option 4</option>
    </select>
    
    <select id='select2'>
    
    </select>
    

    JS

    document.getElementById('select1').onchange = function(){
        var xmlhttp=new XMLHttpRequest();
        var params = "id="+this.value           //you can add more data, use & as delemitter
    
        xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xmlhttp.setRequestHeader("Content-length", params.length);
        xmlhttp.setRequestHeader("Connection", "close");
    
        xmlhttp.onreadystatechange=function(){
            if (xmlhttp.readyState==4 && xmlhttp.status==200){
                fillSelect(xmlhttp.responseText);
            }
        }
    
        xmlhttp.open("POST","path/to/php.php",true);
        xmlhttp.send(params);
    }
    
    var fillSelect = function(response){
        //Here you can go through all elements from response 
        //and build new options and append them to Select2
    }
    

    PHP

    if (!isset($_POST('id')) die("Submission failed!");
    
    $id = $_POST('id');
    
    $mysqli = new mysqli(HOST, USER, PW, DB);   //assuming you have these static variables, change it for your settings
    
    //use $id now to create the query
    $query = "[...]";
    
    $result = $mysqli->query($query);
    
    echo json_encode($result);
    

    JSFIDDLE for parts of the code

    我希望php不包含错误。我无法测试它。如果出现问题,那么只需检查拼写是否正确等等......