jQuery $ .post不显示第二次更改的数据

时间:2016-05-12 19:57:15

标签: php jquery html .post

我已创建此代码,只是为每章的特定问题显示解决方案。当我第一次更改章节时,会显示解决方案(来自post.php文件的数据)。但是,当我再次更改章节时,它不显示新的解决方案,即使我可以在'console.log'中看到新的解决方案

这是我的代码:

        <!doctype html>

        <html>

        <head>
        <style>
        .chapter_list
       {
         position: absolute;
         left: 100px;
         top: 80%;
      }
          .question_list
      {
    position: absolute;
    left: 300px;;
    top: 80%;
     } 


     </style>
     <link rel="stylesheet" type="text/css" href="index.css"/>
     <script          src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    <script type="text/javascript" src="jquery-1.4.1.min.js"></script>
    <script type="text/javascript" src="jquery-1.12.2.js"></script>
    <script type="text/javascript">
        $(document).ready(function()
        {
            $(".chapter_list").change(function()
            {
                var chapter=$(this).val();


                $.ajax
                ({
                type: "POST",
                url: "get_question_list.php",
                data: 'chapter='+chapter,
                cache: false,
                success: function(html)
                {
                    $(".question_list").html(html);

                } 
                });
            });

        });

        function show_question()
        {
            var chapter = document.getElementById("select_chapter");
           var selected_chapter = chapter.options[chapter.selectedIndex].value;
           //console.log(selected_chapter);
           var question = document.getElementById("select_question");
            if(question.options[question.selectedIndex].value)
            {
            var selected_question = question.options[question.selectedIndex].value;
            //console.log(selected_question);
            $.post('post.php',{selected_chapter:selected_chapter,                              selected_question:selected_question}).success(
       function(data)
       {
            console.log(data);
           $('#display_solution').html(data);
           //alert(data);

       });
        }


        }

    </script>

</head>

<body >

    <label>Chapter</label>
    <select name="chapter_list" class="chapter_list" id="select_chapter" onChange="show_question();">
        <option value="asd" selected="selected">-- Select Chapter --</option>
        <?php
            $connect=mysql_connect("localhost","root","");
            mysql_select_db("books_for_solutions");

            $sql=mysql_query("SELECT DISTINCT chapter FROM math151");

            while ($row=mysql_fetch_array($sql))
            {
        ?>
            <option value="<?php echo $row['chapter']; ?>"><?php echo $row['chapter']; ?></option>
            <?php
            } 
            ?>
    </select>
<label>Question</label>
    <select name="question_list" class="question_list" id="select_question" >
        <option value="a" selected="selected">-- Select Question --</option>  
    </select>
<div id="display_solution"></div>
</body >

</html>

这是我的post.php文件

<?php
    include index.php;

    $chapter = $_POST['selected_chapter'];
    $question = $_POST['selected_question'];


    $connect=mysql_connect("localhost","root","");
    mysql_select_db("solutions");
    $sql=mysql_query("SELECT * FROM solutions WHERE chapter='$chapter' AND question='$question'");
    $row=mysql_fetch_assoc($sql);
    $dbloc_question=$row['location_question'];
    $dbloc_solution=$row['location_solution'];

    if ($chapter=="chapter1")
    {
        $display= "solution from chapter1";    
    }
    else
    {
        $display= "solution from chapter2";
    }       
    echo "<p>$display</p>";

?>

1 个答案:

答案 0 :(得分:0)

1)如评论中所述,您混合了onchange标记和jQuery .on()处理程序(通过.change())。这可能会导致误操作。

2)你包括3个(不同的)jQuery版本,这也不好。

3)您使用$ .post()。success(),已弃用,请参阅docs弃用说明

4)只是注意,同一事物的不同变量名称和“使用严格”导致使用错误的名称(html vs data) - 但这里没有问题。

5)另一个注意事项,至少我的意见是:你混合了jQuery调用和本机javascript调用。本机调用更快,毫无疑问,但混合不会产生干净的代码。

<!doctype html>
<html>
    <head>
        <style>
.chapter_list {
    position: absolute;
    left: 100px;
    top: 80%;
}
.question_list {
    position: absolute;
    left: 300px;;
    top: 80%;
} 
        </style>
        <link rel="stylesheet" type="text/css" href="index.css"/>
        <!-- Choose, only use one jQuery at at time -->
        <!-- <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> -->
        <!-- <script type="text/javascript" src="jquery-1.4.1.min.js"></script> -->
        <script type="text/javascript" src="jquery-1.12.2.js"></script>
        <script type="text/javascript">
$(document).ready(function() {
    $(".chapter_list").change(function () {
        var chapter=$(this).val();

        console.log('Fire ajax get_question_list.php');
        $.ajax ({
            type: "POST",
            url: "get_question_list.php",
            data: 'chapter='+chapter,
            cache: false,
            success: function(html) {
                console.log('Result from get_question_list: ', html);
                $(".question_list").html(html);
            } 
        });
    });

    // Add event handler to .chapter_list and .question_list
    // If this is fired twice (after the first ajax to get_question_list) remove .chapter_list here
    $(".chapter_list,.question_list").change(function () {
        show_question();
    });
});

function show_question() {
    var chapter = document.getElementById("select_chapter");
    var selected_chapter = chapter.options[chapter.selectedIndex].value;
    console.log("Selected chapter: ", selected_chapter);
    var question = document.getElementById("select_question"),
        selected_question = $(question).val();
    console.log("Selected question: ", selected_question);
    if(selected_question) {
        console.log("Try to load solution for question ", question_value)
        // Here was the closing bracket wrong
        //old: $.post('post.php',{selected_chapter:selected_chapter, selected_question:selected_question}).success(
        $.post('post.php', {selected_chapter:selected_chapter, selected_question:selected_question}, function(data) {
            console.log('Result from post.php: ', data);
            $('#display_solution').html(data);
            //alert(data);
        });
    }
}
        </script>
    </head>
    <body>
        <label>Chapter</label>
        <select name="chapter_list" class="chapter_list" id="select_chapter"><!-- Removed onChange -->
            <option value="asd" selected="selected">-- Select Chapter --</option>
<?php
$connect=mysql_connect("localhost","root","");
mysql_select_db("books_for_solutions");
$sql=mysql_query("SELECT DISTINCT chapter FROM math151");
while ($row=mysql_fetch_array($sql)) {
?>
            <option value="<?php echo $row['chapter']; ?>"><?php echo $row['chapter']; ?></option>
<?php
} 
?>
        </select>
        <label>Question</label>
        <select name="question_list" class="question_list" id="select_question">
            <option value="a" selected="selected">-- Select Question --</option>  
        </select>
        <div id="display_solution"></div>
    </body >
</html>