0

大家好,我有这个代码

$Sql = "SELECT * FROM tabmakes
    WHERE Type_Id = '1'
    ORDER BY Make_Name Asc";
$Query = mysql_query($Sql,$Conn) or die(mysql_error($Conn));
$marcas = array();
  while ($Rs = mysql_fetch_array($Query)) {
    $marcas[ $Rs['Marca_Id'] ] = $Rs['Marca_Nome'];
    }
     asort($marcas); // tried using asort only works on firefox     
     echo ( json_encode($marcas) );

这是我的jQuery

$("#div-test-1").change(function(){
    var tmpTipo = $(".buscaMarcas").val();
    $.getJSON("/php/getMakes.php",{tipo: tmpTipo, marca: $(this).val()}, function(resposta){
        if(resposta === null){
            var options = '<option value="">-</option>';
        }
        else{
            var options = '<option value="">-</option>';
            $.each(resposta, function(key, val) {
                options += '<option value="' + key + '">' + val + '</option>';
            });
        }
        $("select.recebeModelos").html(options);
        $("select.recebeEstilos").html('<option value="">-</option>');
    });
});

json 输出按 NAME 排序,但 Select 填充所有信息时,值按 ID 排序。

那么我如何获得结果并显示在按名称排序的选择上。

谢谢。

4

1 回答 1

0

您正在 PHP 中构建一个数组。即使您根据 PHP 的输出以 NAME 顺序构建它,当 PHP 启动 json 转换过程时,它也会以数字键顺序构建它。然后,您还可以通过运行数组来强制执行该数字键顺序asort()

一种解决方法是更改​​数组的构建方式:

$data = array();
while($row = mysql_fetch_assoc($result)) {
   $data[] = array('id' => $row['id'], 'name' => $row['name'])
}

当然,这需要更改 JS 代码来处理新结构,但这将保留名称顺序。

于 2012-05-02T21:19:43.300 回答