$ _SESSION变量显示意外行为

时间:2015-03-13 10:13:02

标签: javascript php jquery session

我目前正在处理一个包含onclick() <td>个元素的表格,这些元素会将信息发送到PHP页面。

基本思想是,如果单击一门课程(例如法语,数学,英语......),PHP页面将检索该值,然后执行SQL代码,为我提供该特定课程的所有辅导员。 / p>

<script>
    function courseToTutor(id) {
        var courseClicked = document.getElementById("course" + id).value;
        $.post('loadDivs/loadTutors.php', {postname: courseClicked});
        $('#divTutors').load('loadDivs/loadTutors.php');
    }
</script>

单击<td>时,会将其id(在php中生成)作为参数发送。在函数内部,我使用该参数来查找<td>中的值(存储在input type="hidden"内)。

我有一个PHP页面,它们都获得了发布的值,如下所示:

if (isset($_POST['postname'])) {
    $course = $_POST['postname'];
    $_SESSION['clickedCourse'] = $course;
    echo $course;
}

页面的其他部分是

else {
  //generate table with tutors for a specific course (with SQL)
}

大约85%的时间都有效。是的,我使用了正确的session_start();,我有正确的数据库连接等等。

当我点击<td>时,我会在loadTutors.php发出始终触发器的提醒,它会提醒我$_SESSION['clickedCourse];

85%的时间此警报显示正确的信息,另外15%的时间是空的。

这不是我页面上的其他代码,因为我在执行该代码之前会触发警报。

提前致谢

修改 这是我用来生成WHOLE课程表的php。

<?php
$counter = 1;
if (!$res = $link->query($sqlSelectCourses)) {
    trigger_error('Error in query ' . $link->error);
} else {
    while ($row = $res->fetch_assoc()) {
        ?>
        <tr>
            <td onclick="courseToTutor(this.id);" id="<?php echo $counter; ?>">
                <?php echo $row["course"]; ?><input type="hidden" value="<?php echo $row["course"]; ?>" id="course<?php echo $counter; ?>">
            </td>
        </tr>
        <?php
        $counter+=1;
    }
}
?>

1 个答案:

答案 0 :(得分:1)

 $.post('loadDivs/loadTutors.php', {postname: courseClicked});
 $('#divTutors').load('loadDivs/loadTutors.php');

您正在发送两个请求,一个用于发送数据,另一个用于接收新数据。 可以发生,第二个请求首先到达服务器,我认为这是15%的时间(因此错误的结果)。你应该做的是使用第一个请求并使用它的响应:

 $.post('loadDivs/loadTutors.php', {postname: courseClicked}, function(response){
    $('#divTutors').html(response);
});

编辑:如果您无法设置您的PHP脚本,以便它直接通过“点击请求”发送您的新内容,请改用:

 $.post('loadDivs/loadTutors.php', {postname: courseClicked}, function(){
    $('#divTutors').load('loadDivs/loadTutors.php');
});

这将等待第一个请求在开始第二个请求之前完成。