Ajax POST函数返回相同的结果

时间:2014-07-11 19:13:39

标签: javascript php jquery ajax

我刚刚遇到一个问题,尝试使用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:
    }

?>

PS 别担心我的不安全代码只是试图让它工作。任何帮助将不胜感激,因为我已经在过去几个小时了。

1 个答案:

答案 0 :(得分:3)

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

PHP代码的第4行

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

Intval返回一个整数,这很好,但是,你也调用了isset,它返回一个布尔值。在大多数情况下,isset结果为true,然后intval结果为1。

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

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