Php 一个下拉列表取决于另一个下拉列表

Php 一个下拉列表取决于另一个下拉列表,php,javascript,ajax,character-encoding,drop-down-menu,Php,Javascript,Ajax,Character Encoding,Drop Down Menu,我开发了一个php网页,其中包含两个下拉列表select标记,其中一个用于显示丰田、日产、雪佛兰等车型 Toyota Nissan Chevrolet 另一个应用于显示丰田凯美瑞、丰田Corrolla、丰田Cressida、丰田Eco和son等车型,具体取决于从第一个下拉列表中选择的车型 我使用PHP作为开发语言,使用Sybase作为数据库,并使用ODBC连接到它。 我使用Windows-1256作为字符编码,因为我显示的数据是阿拉伯语 我尝试使用Ajax实现这一点,但我不知道如何使用Ajax

我开发了一个php网页,其中包含两个下拉列表select标记,其中一个用于显示丰田、日产、雪佛兰等车型

Toyota
Nissan
Chevrolet
另一个应用于显示丰田凯美瑞、丰田Corrolla、丰田Cressida、丰田Eco和son等车型,具体取决于从第一个下拉列表中选择的车型

我使用PHP作为开发语言,使用Sybase作为数据库,并使用ODBC连接到它。 我使用Windows-1256作为字符编码,因为我显示的数据是阿拉伯语

我尝试使用Ajax实现这一点,但我不知道如何使用Ajax只返回一个值,但在这种情况下,我需要以以下格式回复一些数据库记录:-

15 "Toyota Camry"
16 "Toyota Corrolla"
17 "Toyota Cressida"
18 "Toyota Eco"
此外,数据以阿拉伯语发送,而非上文所列的英语,因此列表可能如下所示:-

15 "تويوتا كامري"
16 "تويوتا كرولا"
17 "تويوتا كرسيدا"
18 "تويوتا إيكو"
我如何使用Ajax做到这一点,并确保阿拉伯语文本能够很好地显示

我等待你的回答、帮助和提前感谢

我的代码是这样写的,目的是让事情变得更清楚,对其他人有用,并得到正确的答案:

第一个文件

另一个文件是

我希望这清楚地说明了我所问的问题,任何人都能帮助我找到错误或遗漏的地方,以获得正确格式的输出,而不是第二个下拉列表中显示的无法读取的奇怪符号和字符


提前感谢

在这种情况下,我所做的如下:

我在服务器上构建了第一个dropdownlist,例如,在数据库中的汽车类别上使用PHP。我将类别的id作为选项的值。生成的HTML应该如下所示:

丰田 日产 雪佛兰 ...

然后在页面上,使用JavaScript,我监听select的onchange事件,并在发生时将category id发送到服务器

服务器上的PHP代码选择类别id并从product_表中选择您的_cols,其中cat_id=$\u GET['id']。使用JSON_encode将结果作为JSON发送

最后,用JavaScritp解析返回的数据并填充模型dropdownlist

以下是客户端脚本的基本外观:

<script type="text/javascript">
$(document).ready(function() {
    $('#cars-categories').change(function () {
        $('#car-models option').remove();
        $.ajax({
            url: "get_data.php",
            dataType: 'json',
            data: { category: $('#cars-categories').val() },
            async: true,
            success: function(json){
                $.each(json, function(key, value){
                    $('#car-models').append('<option value="' + value.id + '">' + value.name + '</option>');
                });
            }
        });
        $('#car-models').show();
    });
});
</script>
编码不应该是个问题

编辑:根据问题作者的要求,这里有一种简单的方法可以从DB查询中获取所有行,并将它们作为JSON编码的字符串发送回页面

<?php
// connect to DB
...
// initialize an array that will hold the rows
$rows = array();
// sanitize the category id. since it is an int, it is safest just to cast it to an integer
$cat_id = (int)$_GET['category'];
$result = mysql_query("SELECT id, name FROM `models` WHERE cat_id = $cat_id");
while($row = mysql_fetch_assoc()){
   $rows[] = $row;
}
// do a regular print out. It is not going to the screen but will be returned as JavaScript object
echo json_encode($rows);
// you have to exit the script (or at least should not print anything else)
exit;
?>

Martin先生,除了在第3步中使用JSON发送数据和在第4步中解析数据并填充第二个dropdownlist之外,您提到的所有内容我都已经完成了。你能给我提供一个完整的和类似的代码样本和例子吗?谢谢。我将用jQuery代码更新答案,因为它比普通JavaScript容易得多。您可能会考虑使用jQuyRoCK,没有问题,差异将以访问Web页面中包含的HTML元素的方式进行。Martin,我如何将数据库查询的结果集分配给JSON?我应该将行存储在一个数组中,然后使用JSON对其进行编码,还是将结果集附加到一个选项列表中,然后传递它。很抱歉问了很多问题,感谢您的努力,但当我运行代码时,它会给我空的选项列表,因为成功:部分似乎根本没有运行。另外,json这个词应该是传递的变量的名称,或者什么?表的编码是什么?数据库的编码是UTF-8I,那么,我无法理解如何在页面上打印内容。我在showCarData.php中没有看到任何转换showCarData.php中只有一条语句与showCarData.php中的编码相关问题出现在本页中,因为我似乎需要一个jquery或javascript函数来将json utf-8编码的数据转换为windows-1256编码的数据,但在JS中似乎没有类似的函数??您确定您的DB表使用UTF8吗因为这些值不应该使用UTF8以外的页面编码正确打印?
<script type="text/javascript">
$(document).ready(function() {
    $('#cars-categories').change(function () {
        $('#car-models option').remove();
        $.ajax({
            url: "get_data.php",
            dataType: 'json',
            data: { category: $('#cars-categories').val() },
            async: true,
            success: function(json){
                $.each(json, function(key, value){
                    $('#car-models').append('<option value="' + value.id + '">' + value.name + '</option>');
                });
            }
        });
        $('#car-models').show();
    });
});
</script>
<?php
// connect to DB
...
// initialize an array that will hold the rows
$rows = array();
// sanitize the category id. since it is an int, it is safest just to cast it to an integer
$cat_id = (int)$_GET['category'];
$result = mysql_query("SELECT id, name FROM `models` WHERE cat_id = $cat_id");
while($row = mysql_fetch_assoc()){
   $rows[] = $row;
}
// do a regular print out. It is not going to the screen but will be returned as JavaScript object
echo json_encode($rows);
// you have to exit the script (or at least should not print anything else)
exit;
?>