当前位置: 首页 > 面试题库 >

使用Ajax填充选择框

乐正浩宕
2023-03-14
问题内容

好的,这是我对Ajax的第一次尝试,它使我发疯,因为我实在无法绕开它。我想做的是在第一个框中用数据库中的客户填充,然后使用customerID通过select.php脚本从数据库中选择所有车辆ID。发生的情况是“客户”框被选中,但是选择客户时什么也没有发生。

这是我的Test.php文件:

<?php include 'connectmysqli.php'; ?>
<html>

    <head>
        <meta http-equiv="Content-type" content="text/html; charset=utf-8">
        <title>Select test</title>
        <script src="./js/jquery/jquery.js"></script>
        <script type="text/javascript" charset="utf-8">
            $$('#customer')
                .on('change', function () {
                    $.getJSON('select.php', { customerId: $(this)
                            .val() }, function (data) {

                        var options = '';
                        for (var x = 0; x < data.length; x++) {
                            options += '<option value="' + data[x][
                                    'id'] + '">' + data[x]['reg'] +
                                '</option>';
                        }
                        $('#vehicle')
                            .html(options);
                    });
                });

        </script>
    </head>

    <body>
        <select id="customer">
                <?php
        $sql = <<<SQL
        SELECT *
        FROM `customers`
        SQL;
        if(!$result = $db->query($sql)){ die('There was an error running the query [' . $db->error . ']');}
        while($row = $result->fetch_assoc()){
        if ($row['bussinessname'] == ''){$name = $row['title'].' '.$name = $row['firstname'].' '.$name = $row['surname'];}else
        {$name = $row['bussinessname'];}
        echo '<option value="'.$row['customerID'].'">'.$name.'</option>';
        }
        echo '</select></p>'; ?>
        </select>
        <select id="vehicle">
                </select>
    </body>

</html>

这是我的select.php文件:

<?php include 'connectmysqli.php'; ?>
<?php
        $id = $_GET['customerId'];
        $sql = 'SELECT * FROM vehicles WHERE customerID = ' . $id;
        $result = $db->query($sql);

        $json = array();
        while ($row = $result->fetch_assoc()) {
          $json[] = array(
            'id' => $row['vehicleID'],
            'reg' => $row['reg'] // Don't you want the name?
          );
        }
        echo json_encode($json);

?>

我正在尝试修改本教程以使用数据库,但到目前为止我没有成功。 http://remysharp.com/2007/01/20/auto-
populating-select-boxes-using-jquery-
ajax/

在Chrome控制台中,我收到错误消息:

Port error: Could not establish connection. Receiving end does not exist.     miscellaneous_bindings:235
chromeHidden.Port.dispatchOnDisconnect

问题答案:

在页面上呈现选择之前,将分配客户选择的更改事件。将事件处理程序移至document.ready:

<script type="text/javascript" charset="utf-8">
$(document).ready(function(){
    $('#customer').on('change', function (){
        $.getJSON('select.php', {customerId: $(this).val()}, function(data){
            var options = '';
            for (var x = 0; x < data.length; x++) {
                options += '<option value="' + data[x]['id'] + '">' + data[x]['reg'] + '</option>';
            }
            $('#vehicle').html(options);
        });
    });
});
</script>

我也改为$$('#customer')$('#customer')。最后,修复您的SQL注入漏洞:

$sql = 'SELECT * FROM vehicles WHERE customerID = ' . (int)$id;

在此处将ID强制转换为int会阻止SQLi,但是您应该考虑使用Prepared
Statement

您在问题中提到的错误看起来与您的代码无关。它看起来与Chrome扩展程序有关。

这不是问题的一部分,但这是构建车辆选项的代码的改进版本:

$.getJSON('select.php', {customerId: $(this).val()}, function(data){
    var vehicle = $('#vehicle');

    for (var x = 0; x < data.length; x++) {
        vehicle.append(new Option(data[x].reg, data[x].id));
    }
});

改进之处包括:

  • 将选择存储在变量中,这样我们就不必在循环的每次迭代中都继续查询DOM
  • 使用new Option(...).append()创建选项并将其添加到车辆选择中。像这样构建元素比创建原始HTML更好,因为这样一来,您不必担心诸如<>数据之类的字符-这会破坏当前代码的HTML。
  • 您的数据被解码为Javascript对象数组,因此,首选使用对象符号(data[x].id)而不是data[x]['id']


 类似资料:
  • 问题内容: 我较早前发布了一个问题,但运气不太好,我希望清除第二个下拉列表的内容并重新填充该下拉列表,具体取决于第一个下拉列表中的值。 我有以下选择框,如下所示: 在此下拉菜单下,我还为模型添加了另一个下拉菜单: onchange我想清除第二个下拉列表,并在其中填充与汽车品牌相关的模型。例如。 然后,我具有如下所示的PHP函数(我正在使用codeigniter)-该函数使用Car ID并返回所有模

  • 问题内容: 因此,我有一个使用ColdFusion的项目,并且该项目的表单带有下拉菜单。 选择下拉列表后,我需要做的是针对ajax调用来调用ColdFusion cfc,该cfc返回信息以填写下拉列表下的表单。 以上面的小提琴为例,如果用户选择“ 2”,则名称字段将具有Bob,Fake Street 202和111-555-1234。如果他们选择“ 3”,他们将从CFC(数据库)返回任何其他信息。

  • 问题内容: 我想使用css在html中的选择选项之间添加某种空间(填充,边距或其他)。我已经尝试使用类似的东西: 但是没有用。我已经读过,这是可以做到的,但在IE中不起作用。无论如何,即使它无法在IE中运行,我也希望它可以在其他浏览器中运行。 PS:当前正在使用Chrome 问题答案: 选择选项的样式非常有限,因为要在操作系统中的所有应用程序之间保持一致性和一致性,因此浏览器应限制某些基本元素的样

  • 问题内容: 我有一个包含2个@DropDownListFor的Helpers的视图: 这是我用来捕获数据的临时模型: 创建页面时将填充其中一个DropsDownList,而第二个将根据用户在第一个DropDownList中选择的选项进行填充。为了实现这一点,我正在使用ajax。我使用的javascript如下所示: 这是AJAX调用的Controller: 到目前为止,一切正常-当我在Provin

  • 我有3个动态选择,状态- 如果我在stateCountryCityAction(ex$idState=1;)内手动设置$idState,该函数可以正常工作,但dinamally不工作!为什么????:( 这是我的应用程序\控制器: 这是应该填充第二个select的函数。它位于我的应用程序\控制器中,位于其他功能的下方: 这是我的jquery函数。我试图在select更改时提醒var状态,并且输出是

  • 我有一个调查,有一堆问题,包括实际问题,一些是或否的单选按钮和一个评论框。我加了一张照片给你看。下面是填充问题后的html结构。 此信息通过web服务和jquery动态填充。看起来这些问题是动态填充的,每个问题都包含相同的类名、范围名等。有40多个问题被附加到div中。 我想做的是选择一个特定的问题并选中一个特定的单选按钮。然后,如果单击某个单选按钮,则会自动选中其他单选按钮。我相信Jquery是