2013-04-12 56 views
0

我有两个选择 - 一个用于地区,一个用于城市。我想要的是,当我点击region时,它通过Ajax进入我的数据库并抓取正确的城市。其实我已经抓住了它,但我不能把它放在cities选择。在选择地区时捕捉城市

这里是JS选择功能onClick事件代码,我的Ajax功能:

$.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(数据)显示

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

正是我需要的。

Ajax控制器:

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

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

所以,我怎么可以把它放在我的选择:

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

回答

1

您没有正确地使用数据,应该是

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

我这样做与$(数据)。每个(函数(),谢谢 – Stopper

1

在您的成功回调您可以执行以下操作:

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

未测试,但它应该工作。

+0

'data'已经是JSON格式 – slash197

+0

哦,是的,你说得对,我会编辑。 – Lebugg

1

您需要创建一个选项标签来填充你的选择

$('#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)); 
相关问题