我目前正在处理一个包含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;
}
}
?>
答案 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');
});
这将等待第一个请求在开始第二个请求之前完成。