【问题标题】:Jquery drop down option on based previous selction基于先前选择的 Jquery 下拉选项
【发布时间】:2014-07-06 09:32:17
【问题描述】:

是否可以根据之前的下拉选择从数据库中获取数据?

例如:

<select id="paramscountries" class="chzn-done" style="display: none;" name="params[countries][]" multiple="true" size="10">
    <option value="1">Afghanistan</option>
    <option value="2">Albania</option>
    <option value="3">Algeria</option>
    <option value="4">USA</option>
</select>

如果我从上面的列表中选择美国,它将进行查询并从数据库中获取所有州的名称。例如,从 states.php & 将在另一个下拉选择中显示所有状态名称,而无需重新加载该页面。

【问题讨论】:

  • Is it possible to get data from the database based on the previous drop down selection? 答案 = Yes
  • 谢谢,但我怎么能做这样的列表?
  • 这里描述的方式太多了,我建议你学习一下AJAX,它可以在不重新加载页面的情况下与你的后端(PHP / MySQL)进行通信,然后使用jQuery / Javascript处理返回值并制作/填充第二阶段下拉列表。
  • 我使用 php 进行了查询,它以 JSON 格式发送数据,如下所示:{"222":[{"virtuemart_state_id":"65","virtuemart_vendor_id":"1","virtuemart_country_id" :"222","virtuemart_worldzone_id":"0","state_name":"England"},{"virtuemart_state_id":"66","virtuemart_vendor_id":"1","virtuemart_country_id":"222","virtuemart_worldzone_id" :"0","state_name":"Northern Ireland"}]} 但我想检索 measuremart_state_id 和 state_name 来制作第二个下拉列表。
  • 看看如何遍历 JSON 并随心所欲地使用它stackoverflow.com/questions/24594241/… 然后看看并学习如何在 jQuery 中添加元素

标签: javascript php jquery html mysql


【解决方案1】:

您需要为此使用 Javascript 或 jQuery,并使用它发布到将返回您的结果的页面。

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<select id="paramscountries" class="chzn-done" style="display: block;" onchange="getNewList($(this).val());" name="params[countries][]" multiple="true" size="10">
    <option value="1">Afghanistan</option>
    <option value="2">Albania</option>
    <option value="3">Algeria</option>
    <option value="4">USA</option>
</select>

<select name="states" id="states">
</select>

<script type="text/javascript">
function getNewList(country) {
    $.post('post.api.php', {'api': 'getStates', 'countries': country}, function(response) {
        var obj = $.pareseJSON(response);
        $('#states').html(obj.states);
    });
}

post.api.php 页面

<?php

if(isset($_POST['api'])){

    if($_POST['api'] == 'getStates'){

        // sdet the countries array to a variable
        $countries = $_POST['countries'];

        // set a variable to hold the results
        $results = array();

        // query your db
        $stm = $db->prepare('SELECT * FROM `your_database` WHERE `country` IN("'.implode('","', $countries).'")');
        $stm->execute();
        if($stm->rowCount() > 0){
            foreach($stm->fetchAll(PDO::FETCH_ASSOC) as $row){
                $results['states'] .= '<option value="'.$row['stateName'].'">'.$row['stateName'].'</option>';
            }
        }            
        echo json_encode($results);
    }

}

我会做这样的事情。希望这里有足够的内容让您滚动。

【讨论】:

  • 非常感谢。但是我已经有 php 文件并且已经像这样发送 JSON: {"222":[{"virtuemart_state_id":"65","virtuemart_vendor_id":"1","virtuemart_country_id":"222","virtuemart_worldzone_id":"0 ","state_name":"England"},{"virtuemart_state_id":"66","virtuemart_vendor_id":"1","virtuemart_country_id":"222","virtuemart_worldzone_id":"0","state_name":"Northern爱尔兰"}]} & 我想用 measure_state_id 和 state_name 下拉。
  • 您可以使用 jQuery 将 json 转换为对象。使用 var obj = $.parseJSON(response);如我上面的示例所示。然后您可以遍历对象并访问您需要的 2 个字段 $.each(obj, function(i,v){ console.log(v.virtuemart_state_id); });
【解决方案2】:

尝试使用 jquery ajax 请求。像这样的

jQuery

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>
<script>
$(document).ready(function(){
    $('#paramscountries').change(function(){
        $.ajax({
            url: 'states.php'
            ,data:{val: $(this).val()}
            ,dataType:'json'
            ,type: 'POST'
            ,success:function(data){
                for(var i = 0; i < data.length; i++){
                    var dropDownValue = '<option value="'+ data[i] +'">'+ data[i] +'</option>'
                    $('#secondDropDownList').append(dropDownValue);
                }
            }
        });
    });
});
</script>

在 states.php 中

$con=mysqli_connect("localhost","user","password","db_Name");
if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
if(isset($POST['val'])){
$var = $_POST['val'];
$result = mysqli_query($con,"SELECT * FROM table_name WHERE table_column_name = '$var'");
$arr = array();
while($row = mysqli_fetch_array($result)) {
   $arr[] =  $row['name'];
}
echo json_encode($arr);
}
mysqli_close($con);

在 HTML 中

<select id="secondDropDownList"></select>

【讨论】:

  • 谢谢。但是,如果格式是这样的,我如何检索derdmart_state_id & state_name: {"222":[{"virtuemart_state_id":"65","virtuemart_vendor_id":"1","virtuemart_country_id":"222","virtuemart_worldzone_id": "0","state_name":"England"},{"virtuemart_state_id":"66","virtuemart_vendor_id":"1","virtuemart_country_id":"222","virtuemart_worldzone_id":"0","state_name": “北爱尔兰”}]}
猜你喜欢
  • 2012-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多