如何将sql查询结果传递给javascript函数?

时间:2010-11-14 19:53:30

标签: php javascript mysql

您好 我想知道什么是将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>

3 个答案:

答案 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)

您可能需要考虑两个主要选项:

  1. 在将响应发送到浏览器之前,在PHP中在服务器端生成JavaScript代码。在这种情况下,您将拥有浏览器中保存的所有数据。这将非常快,但只有在您没有大量数据填充下拉列表时才可行。

  2. 您还可以使用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答案,但是如果不使用框架,这将更难以实现。