javascript - $_SESSION 变量显示意外行为

标签 javascript php jquery session

我目前正在使用 onclick() 处理一张 table <td>将信息发送到 PHP 页面的元素。

基本思想是,如果单击一门类(class)(例如法语、数学、英语等),PHP 页面会检索该值,然后执行 SQL 代码,为我提供该特定类(class)的所有导师。

<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(); s,我有一个正确的数据库连接等等。

当我点击<td>时,我收到关于 loadTutors.php 的警报总是触发,它会提醒我的 $_SESSION['clickedCourse]; .

此警报在 85% 的情况下显示正确信息,在另外 15% 的情况下,它为空。

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

提前致谢

编辑 这是我用来生成整个类(class)表的 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;
    }
}
?>

最佳答案

 $.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');
});

这将等待第一个请求完成,然后再开始第二个请求。

关于javascript - $_SESSION 变量显示意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29029611/

相关文章:

javascript - 如何使用 REST for Sharepoint 2013 删除项目

php - 任何语言的单词字符的正则表达式

javascript - 单击 "submit"按钮后,将数据发送到 Parse

php - 如何在该类中创建类实例的常量数组?

php - 什么 PHP 需要与 gettext 一起使用?

javascript - Highcharts 像选择一样留下选择

javascript - IE 中水平滚动的顶部固定菜单

jquery - 如何将一个类添加到一个元素并保持它在那里直到鼠标离开 animate.css?

javascript - jquery Tablesorter - 自然排序顺序?

javascript - Dart polymer Google Picker