заказ по имени в поле выбора не работает в Google Chrome и IE


У меня есть функция, которая возвращает список названий городов, связанных с city_id, упорядоченных по названию города.

Я хочу показать их в поле выбора. В Firefox (23.0.1) он отлично работает даже с порядком. Но в случае IE (10) и chrome (29.0.1547.66 m) порядок неверен. Я использую PHP и zend framework. Мой код:

$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"
    }

}

Пожалуйста, помогите мне, как решить эту проблему?

Author: Petr Janeček, 2013-09-09

2 answers

Можете ли вы обновить свой код до этого

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>";
}

Похоже, что chrome автоматически сортирует объект json с индексом.

ССЫЛКА:
Chrome и IE автоматически сортируют объекты JSON, как это отключить?
https://code.google.com/p/chromium/issues/detail?id=37404

 2
Author: Nandakumar V, 2017-05-23 12:05:11

В строке отсутствует ASC или DESC 12

->order("city ASC");
 0
Author: Moeed Farooqui, 2013-09-09 06:08:55