【问题标题】:Populate a dropdown list based on the another dropdown list using AJAX JSON使用 AJAX JSON 根据另一个下拉列表填充下拉列表
【发布时间】:2014-06-26 07:48:46
【问题描述】:

我知道很多人以前都问过这个问题,但我无法得到与我的问题类似的确切解决方案。

我有一个名为 Category 的下拉列表和另一个下拉列表,而不是一个名为 Grade 的子下拉列表。 当我选择一个类别(假设我从收音机、洗衣机、DVD 播放器等中选择电视)时,该类别的相应等级(比如说电视 - 索尼、日立、三星、飞利浦 ..)应该填充在等级下拉菜单。但是类别和等级都是从数据库中获取的,并且查询运行良好。

AJAX:-

<script>
        function getGradeDetails(category){
            if(category!==""){
                var request = $.ajax({
                    url: "../controller/sales.php",
                    type: "POST",
                    data: {category:category,action:'get_grade_details'},  
                    dataType: "json"
                });
                request.done(function(json_return){    
                    //alert(json_return['grade_desc']);
                    $( "#grade" ).append( "<option>"+json_return['grade_desc']    </option>" );
                }); 
                request.fail(function(jqXHR, textStatus) {
                    alert( "Request failed: " + textStatus );
                    return false;
                });
            }
            else{
                $("#grade").append('<option></option>');
            }
        }
</script>

HTML:-

<td>Category
    <select name="category" id="category" onchange="getGradeDetails(this.value)">
        <option></option>
        <?php 
           require_once '../model/sales.php';
           @$result=Sales::getAllCategories();
           while($value=  mysql_fetch_assoc($result)){
        ?>
        <option value="<?php echo $value['category_code']; ?>">
            <?php echo $value['category_desc'] ?>
        </option>
        <?php } ?>
    </select>
</td>

<td>Grade
<td>
   <select id="grade">
   </select>
</td>

控制器:-

<?php 
    require_once '../model/sales.php';
    $action=$_REQUEST['action'];

    switch($action){
        case 'get_grade_details':
            getGradeDetails();
            break;
        default :
            break;
    }        
    function getGradeDetails(){
        $category=$_POST['category'];
        require_once '../model/sales.php';
        $obj=new Sales();
        $result=mysql_fetch_assoc($obj->getGradesForCategory($category));
        echo json_encode($result);
        exit;
    }
?>

根据此代码,成绩上的下拉值确实只从数据库中获取第一个值。例如:-只有索尼,它避免了其他-日立,三星等。 此外,当我更改另一个类别(例如:-洗衣机)时,Grade 下拉菜单的值 Sony(TV Grade),LG(Washing Machines Grade)。

我想要的是:-

1) 这些值应该作为一个整体出现,而不仅仅是来自数据库的第一个/单个值。

2)当我更改类别(电视到洗衣机)时,不应出现与电视相关的值(索尼),而只会出现与洗衣机有关的值(LG)。

【问题讨论】:

    标签: jquery ajax json


    【解决方案1】:

    问题是您没有循环并将响应列表中的所有项目添加到选择标记的选项中

    request.done(function(json_return){    
                    //alert(json_return['grade_desc']);
                    **$( "#grade" ).append( "<option>"+json_return['grade_desc']</option>"**     );
                });
    

    应更正突出显示的部分,以便将所有值添加为选项,例如

    var options = '';
    
    for (i=0;i< json_return['grade_desc'].length;i++){
       options += "<option>"+json_return['grade_desc'][i]+"</option>";
    }
    $("#grade").append(options);
    

    第二个问题需要更多信息。请发布来自 ajax 的响应的 sn-p。

    【讨论】:

    • 这两个问题都快解决了。但如果我选择电视,我在下拉列表中得到的选项不仅仅是索尼、飞利浦,而是我得到 S O N Y P H I L I P S..........下拉列表中几乎有 11 个选项。我该如何纠正呢???
    • 我认为您收到的 json 响应是字符串化的。在循环之前尝试 pareseJSON。
    猜你喜欢
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多