2013-04-12 3 views
0

J'ai deux sélections - une pour les régions et une pour les villes. Ce que je veux, c'est quand je clique sur region, il va à ma DB via Ajax et saisit les bonnes villes. En fait, je l'ai déjà saisi, mais je ne peux pas le mettre dans la sélection cities.attraper des villes lorsque la région est sélectionnée

Voici ma fonction Ajax dans JS Sélectionner la fonction onClick code d'événement:

$.ajax({ 
       url: '/map/index/ajax', 

      type: 'POST', 
      dataType: 'json', 
      data: { 
       // list of request parameters 
       'r_alias': valueRegionSelect 
      }, 
      success: function(data) { 
       console.log(data); 
       $('#city_select').val(data.c_name); 
      } 
     }); 

console.log (données) montrent

[Object { r_id="39", r_alias="cu", c_id="4649", c_name="Kyev" more...}, Object 
, more...}] 

exactement ce que j'ai besoin.

Ajax Controller:

public function ajaxAction() { 
     $alias = $this->_getParam('r_alias'); 
     $result = Map_Model_Map_Factory::getCityByRegionAlias($alias); 

     $this->view->cities = $result; 
     $this->_helper->json($result); 
    } 

Alors, comment puis-je le mettre dans ma sélection:

<select id="city_select" name="city"> 
          <?php foreach($this->cities as $city): ?> 
          <option ><?php echo $city['c_name'] ?></option> 
          <?php endforeach; ?> 
         </select> 

Répondre

1

Vous n'utilisez pas correctement les données, il devrait être

var html = ""; 
for (var i = 0; i < data.length; i++) 
{ 
    html += '<option value="' + data[i].c_id + '">' . data[i].c_name . '</option>'; 
} 
$('#city_select').html(html); 
+0

je l'ai fait avec $ (données) .Chaque (function(), je vous remercie – Stopper

1

En votre rappel de succès, vous pourriez faire ce qui suit:

success: function(data) { 
    //data  = $.parseJSON(data); 
    var select = $('#city_select').empty(); 

    $.each(data, function(i, item) { 
     select.append($('<option></option>') 
       .attr('value',item.c_id) 
       .text(item.c_name)); 
    }); 
} 

Non testé mais cela devrait fonctionner.

+0

'data' est déjà au format JSON – slash197

+0

Oh, oui , tu as raison, je vais éditer. – Lebugg

1

Vous devez créer des balises d'options pour remplir votre sélection

$('#city_select').empty(); 
for (var i = 0; i < data.length; i++) 
    $('#city_select').append($('<option>').val(data[i].c_id).html(data[i].c_name)); 
Questions connexes