2012-06-14 360 views
2

更新:通過禁用干擾Ajax成功響應的CodeIgniter Profiler來實現此目的。我認爲它增加了一個div給JSON響應。選擇列表未被填充(jQuery Ajax)

我想用mysql數據庫中的數據填充依賴選擇框。問題在於,依賴選擇框沒有得到填充,儘管爲了響應Ajax請求而以正確的格式獲取數據。

請幫助我,因爲我完全不知道這裏發生了什麼。以下是我的JavaScript代碼。

<script type="text/javascript"> 

$(document).ready(function(){ 
    $('#country').change(function(){ 
     $("#cities > option").remove(); 

     var form_data = { 
      country: $('#country').val(), 
      csrf_token_name: $.cookie("csrf_cookie_name") 
     }; 

     $.ajax({ 
      type: "POST", 
      url: "http://localhost/outlets/get_cities", 
      data: form_data, 
      dataType : "JSON", 
      success: function(cities) 
      { 
       $.each(cities,function(id,name) 
       { 
        var opt = $('<option />'); 
        opt.val(id); 
        opt.text(name); 
        $('#cities').append(opt); 
       }); 
      } 

     }); 

    }); 
}); 
</script> 

這裏是HTML。我正在使用Codeigniter。

<form id="form"> 
<?php $cities['#'] = 'Please Select'; ?> 
<label for="country">Country: </label><?php echo form_dropdown('country_id', $countries, '#', 'id="country"'); ?><br /> 
<label for="city">City: </label><?php echo form_dropdown('city_id', $cities, '#', 'id="cities"'); ?><br /> 
</form> 

這裏是控制器:

function get_cities(){ 
    $country = $this->input->post('country'); 
    $this->load->model('city'); 
    header('Content-Type: application/x-json; charset=utf-8'); 
    echo (json_encode($this->city->get_cities($country))); 
} 

&型號:

function get_cities($country = NULL){ 
    $this->db->select('id, name'); 

    if($country != NULL){ 
     $this->db->where('countries_id', $country); 
    } 
    $query = $this->db->get('cities'); 

    $cities = array(); 

    if($query->result()){ 
     foreach ($query->result() as $city) { 
      $cities[$city->id] = $city->name; 
     } 
    return $cities; 
    }else{ 
     return FALSE; 
    } 
} 
+0

您是如何驗證響應正確的?你的數據是什麼樣的?如果你沒有向我們展示什麼是循環的,不可能告訴你的循環是否正確。 – 2012-06-14 19:57:46

+0

@am不是我:有效的點。我將添加控制器和模型代碼到問題中。 – vikrants

+1

請添加呈現的響應。這種閱讀方式更容易閱讀。您可以將其記錄到控制檯,然後複製/粘貼它。 'console.log(JSON.stringify(cities));' – 2012-06-14 20:03:17

回答

0

好吧,我設法通過禁用CodeIgniter Profiler來實現這個功能。 Codeigniter分析器,或者是一個方便的工具,可以在任何帶有Ajax的頁面上打開JavaScript。如果您不能使用Profiler,請使用Making CodeIgniter’s Profiler AJAX compatible提供的解決方案

0

更改你的Ajax成功回調至:

success: function (cities) { 
     for (var id in cities) { 
      var opt = $('<option />'); 
      opt.val(id); 
      opt.text(cities[id]); 
      $('#cities').append(opt); 
     } 
    } 

因爲你的Ajax結果是沒有一個數組,但是一個json對象。