按名称命令json数组ASC不适用于Chrome

时间:2012-05-02 21:16:19

标签: php jquery json

大家好我有这个代码

$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排序的,但是当get填充所有信息时,这些值按ID排序。

所以我如何得到结果并在NAME命令的选择上显示。

感谢。

1 个答案:

答案 0 :(得分:0)

您正在使用PHP构建数组。即使你是根据PHP的内容以NAME顺序构建它,当PHP启动json转换过程时,它将按数字键顺序构建它。然后,您还可以通过asort()运行数组来强制执行该数字键顺序。

解决这个问题的方法是改变数组的构建方式:

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

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