我目前正在使用 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/