您好 我想知道什么是将sql结果发送到javascript函数的最佳方法。 我有两个下拉列表,我想根据第一个填充第二个。 这两个下拉列表都是从mysql数据库中填充的。 fillcourses是javascript函数,但我不知道如何将结果数组传递给它。
$db = new Db();
$db->query('SELECT idDepartment,name FROM department');
<select name="department" onchange=" fill_courses (
SELECT courseNumber,courseId FROM courses
WHERE Department_idDepartment = document.addCourse.department.selectedIndex.value); ">';
while ($row=$db->nextRow())
{
echo'<option value="' . $row['idDepartment'] . '">' . $row['name'] . '</option>';
}
echo'</select>
<select name="courses">
</select>
答案 0 :(得分:3)
另一个jquery w /低级别ajax调用:
$.ajax({
type: "POST",
url: postTo,
data: param ,
dataType: "json" ,
cache: false ,
success: function(json_return ) {
if (json_return && (json_return.statusServer != "false")) {
// the $.each fn is how your js processes the return data
$.each( json_return.rows, function(i, row) {
// write your 2nd option list
});
}
else {
// json error (I define 'statusServer' on the server)
}
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
// enter code here
} // error handling
});
答案 1 :(得分:1)
您可能需要考虑两个主要选项:
在将响应发送到浏览器之前,在PHP中在服务器端生成JavaScript代码。在这种情况下,您将拥有浏览器中保存的所有数据。这将非常快,但只有在您没有大量数据填充下拉列表时才可行。
您还可以使用Ajax,这样当您更改第一个下拉列表的值时,您的浏览器就会向您的服务器发起异步请求,而该请求又将响应数据填充你的第二次下拉。您可能希望使用JavaScript库(如jQuery)从浏览器端帮助您完成此操作。
答案 2 :(得分:1)
您要做的是在第一个下拉列表上设置onChange行为,然后使用Ajax填充第二个下拉列表。
例如(此示例使用jQuery):
$('#select1').change(function() {
// What department is currently picked?
departmentId = $('#select1').val();
// Populate our second dropdown
$('#select2Container').load('/page.php/populateCourses/departmentId/' + departmentId);
});
这是相应的PHP:
$courses = $db->fetchAll('SELECT id, name FROM coursesTable WHERE department_id = ?', $departmentId);
?>
<select name="courses">
<?php foreach ($courses as $course) : ?>
<option value="<?php echo $course['id'] ?>"><?php echo $course['name'] ?></option>
<?php endforeach; ?>
</select>
<?php
这需要您的第二个选择框被<div id="select2Container"></div>
括起来,以便jQuery选择器能够找到它。
我意识到你没有要求jQuery答案,但是如果不使用框架,这将更难以实现。