按名称排序 json 数组 ASC 在 Chrome 上不起作用


Order json array by Name ASC dont works on Chrome

嗨,伙计们,我有这个代码

$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 排序,但选择时填充所有信息,值按 ID 排序。

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

谢谢。

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

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

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

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