返回相同结果的Ajax POST函数


Ajax POST function returning the same result

我刚刚遇到了一个问题,试图使用jQuery, Ajax和php填充两个下拉选择菜单。即使从下拉菜单中选择了不同的选项,代码也会从数据库加载相同的值。下面是代码片段

test.html

<html>
    <script type="text/javascript" src="jquery-1.9.1.min.js"></script>
<body>
    <form method="post" action="self.php">
        <table>
            <tr>
                <td><div><label><strong>class:</strong></label></div></td>
                <td><div><select name="class_id" id="class_id_0">
                        <option value="" selected>Select a Class</option>
                        <option value="1">Nursery</option>
                        <option value="2">Primary</option>
                        <option value="3">Secondary</option>
                        </select></div></td>
            </tr>
            <tr>
                <td><div><label><strong>Sub-Class:</strong></label></div></td>
                <td><div><select name="sub_class_id" id="sub_class_id_0">
                            <option value="">Select a Sub - Class</option>
                        </select></div></td>
            </tr>
            <tr>
                <td><div><label><strong>Subject:</strong></label></div></td>
                <td><div><select name="subject_id" id="subject_id_0">
                            <option value="">Select a Subject</option>
                        </select></div></td>
            </tr>
        </table>
    </form>
</body>
</html>
JQuery

<script>
(function($){
    $("#class_id_0").change(function(){
        var str = "";
        var type = "sub_class";
        $( "#class_id_0 option:selected" ).each(function() {
            str += $( this ).val() + " ";
        });
        $.post( "data.php",{class_id:parseInt(str),type:""+type}).done(function(data){
                            alert(str);
                            alert( "Data Loaded:" + data );
                            $("#sub_class_id_0").html(data); 
        });
    });
    $("#sub_class_id_0").change(function(){
        var str = "";
        var type = "subject";
        $( "#sub_class_id_0 option:selected" ).each(function() {
            str += $( this ).val() + " ";
        });
        $.post( "data.php",{sub_class_id:parseInt(str),type:""+type}).done(function(data){
                            alert(str);
                            alert( "Data Loaded:" + data );
                            $("#subject_id_0").html(data); 
        });
    });
})(jQuery);
</script>

data.php

<?php
    $options = "";
    $query = "";
    $type = isset($_REQUEST["type"]);
    switch($type){
            case "sub_class": 
                $sub_class_id = intval($_REQUEST["sub_class_id"]);
                $default_value = "";
                $default_text = "Select a Sub - Class";
                    $options = "<option value='".$default_value."'>".$default_text."</option>";
                    if($class_id == "" || $class_id == 0)
                    {
                            $options = "<option value = >Select a Class First</option>";
                    }
                    $con = mysql_connect('localhost', 'root', '');
                    $database = mysql_select_db('admin_glisten');
                    $sql="SELECT sub_class_id,sub_class FROM sub_class WHERE class_id = '".$class_id."'"; 
                    $result = mysql_query($sql); 
                    if (!$result) {
                            die("Query failed: " . mysql_error());
                    }
                    while ($row = mysql_fetch_assoc($result)) {
                        $options .= "<option value='".$row['sub_class_id']."'>".$row['sub_class']."</option>";
                    }
                    echo $options;
                    mysql_close($con); 
                break;
            case "subject":
            $sub_class_id = intval($_REQUEST["sub_class_id"]);
            $default_value = "";
                $default_text = "Select a Subject";
                    $options = "<option value='".$default_value."'>".$default_text."</option>"; 
            if($sub_class_id  == "" || $sub_class_id  == 0)
                    {
                            $options = "<option value = >Select a Sub - Class First</option>";
                    }
                    $con = mysql_connect('localhost', 'root', '');
                    $database = mysql_select_db('admin_glisten');
                    $sql="SELECT subject_scheduler.subject_id,subject.subject_id,subject.name FROM subject_scheduler INNER JOIN subject ON subject_scheduler.subject_id=subject.subject_id  WHERE sub_class_id = '".$sub_class_id."'"; 
                    $result = mysql_query($sql); 
                    if (!$result) {
                            die("Query failed: " . mysql_error());
                    }
                    while ($row = mysql_fetch_assoc($result)) {
                        $options .= "<option value='".$row['subject_id']."'>".$row['name']."</option>";
                    }
                    echo $options;
                    mysql_close($con);  
                break;
            default:
    }
?>

p 不要介意我的不安全代码,我只是想让它工作。任何帮助将不胜感激,因为我已经在这个过去的几个小时了。

您正在使用$class_id变量来查询数据库,但$class_id总是相同的。原因如下:

PHP代码第4行

$class_id = intval(isset($_REQUEST["class_id"]));

Intval返回一个整数,这很好,但是,您还调用isset,它返回一个布尔值。在大多数情况下,isset的结果是true, interval的结果是1。

所以实际上你的查询总是:

SELECT sub_class_id,sub_class FROM sub_class WHERE class_id = '1';