3

都市名で並べ替えられた都市名のリストを返す関数がありますcity_id

それらを選択ボックスに表示したい。Firefox (23.0.1) では順不同でも問題なく動作しています。ただし、IE (10) と chrome (29.0.1547.66 m) の場合、順序が正しくありません。私はPHPとzendフレームワークを使用しています。私のコード:

$cities = $countryCityModel->getCities($country);
 print json_encode(array('status'=>'Success',
                         'data'=>$cities)
                  );
 public function getCities($countryId){
    if(!$countryId)
    return false;
    $mdb = $this->getOldDbAdapter(); 
    $sql = $mdb->select()
               ->from('cities', array('city_id','city'))
               ->where('country_id = ?', $countryId)
               ->order("city");
    return $mdb->fetchPairs($sql);
 }
$.ajax({
 url : baseUrl + '/lead/index/get-cities',
 dataType : 'json',
 data : {
          country:country_id
        },
        beforeSend : function(){
          $("#holder_popup").show();
        },
        complete: function(){
          $("#holder_popup").hide();   
        },
        success : function(res) {
           var sbuOptions = "<option value=''>--SELECT--</option>"
           if(res.status == 'Success'){
             for(i in res.data){
               sbuOptions += "<option value='"+i+"'>"+res.data[i]+"</option>";
             }
             $("#city").html(sbuOptions);

           }else{
              $("#city").html(sbuOptions);
              alert(res.msg);
           }
        },
        error : function(jqXHR, exception) {                                
            }
        });

戻り値は次のようになります。

{

    "status":"Success",
    "data":{
        "53029":"DURRES",
        "53331":"ELBASAN",
        "40239":"FIER",
        "16235":"KAMEZ",
        "42191":"KAVAJE",
        "41375":"KUKES",
        "53581":"PESHKOPI",
        "57686":"SHIJAK",
        "56756":"SHKODER",
         "4496":"TIRANA",
        "41342":"VLORE",
        "19454":"VORE"
    }

}

この問題を解決する方法を教えてください。

4

2 に答える 2

2

コードをこれに更新できますか

public function getCities($countryId)
{
    $resultArrary = array();
    if($countryId)
    {
        $mdb = $this->getOldDbAdapter(); 
        $sql = $mdb->select()
                   ->from('cities', array('city_id','city'))
                   ->where('country_id = ?', $countryId)
                   ->order("city");
        $result = $mdb->fetchAll($sql);

        foreach($result as $key => $city )
        {
            $resultArrary[$key]['id'] =  $city['city_id'];
            $resultArrary[$key]['city'] =  $city['city'];
        }
    }

    return $resultArrary;
 }

for(i in res.data)
{
    cityData = res.data[i];
    sbuOptions += "<option value='"+cityData.id+"'>"+cityData.city+"</option>";
}

クロムはインデックスでjsonオブジェクトを自動ソートしているようです。

REF:
Chrome と IE は JSON オブジェクトを自動的に並べ替えますが、これを無効にするにはどうすればよいですか?
https://code.google.com/p/chromium/issues/detail?id=37404

于 2013-09-09T08:00:20.730 に答える
0

行に ASC または DESC がありません12

->order("city ASC");
于 2013-09-09T06:08:55.017 に答える