2016-05-04 4 views
1

У меня есть код в моем коде, результат не отображается или не работает, выбор формы города по-прежнему пуст. Вот HTML:Как получить данные из API с помощью ajax для выбора (значение опции выпадающего списка) в Codeigniter?

<div class="form-group"> 
    <label>Province</label> 
    <select class="form-control" name="province" id="province"> 

    <?php foreach($state_data->data as $sd){ ?> 
    <option id="<?php echo $sd->code; ?>" value="<?php echo $sd->code; ?>" <?php echo (isset($this->session->userdata))?(($this->session->userdata('session_state_code') == $sd->code)?"selected":""):"";?>> 
     <?php echo $sd->name ;?> 
    </option> 
    <?php } ?> 
    </select> 
</div> 
<div class="form-group" id="city_section"> 
    <label>City</label> 
    <select class="form-control" name="city" id="city"> 

    <?php foreach($city_data->data as $cd){ ?> 
    <option value="<?php echo $cd->code; ?>" <?php echo (isset($this->session->userdata))?(($this->session->userdata('session_city_code') == $cd->code)?"selected":""):"";?>> 
     <?php echo $cd->name ;?> 
    </option> 
    <?php } ?> 
    </select> 
</div> 

этого Javascript, чтобы получить данные от контроллера:

$('#province').on('change', function() { 
     var id = $(this).val();; 
     $.ajax({ 
     type: "POST", 
     dataType: 'json', 
     url: "<?php echo base_url() ?>edit_profile/get_city", 
     data: { 
      id: $(this).val() 
     }, 
     success: function(data) { 
      $('select#city').html(''); 
      for (var i = 0; i < data.length; i++) { 
      $("<option />").val(data[i].code) 
       .text(data[i].name) 
       .appendTo($('select#city')); 
      } 
     } 
     }); 
    } 

и это контроллер для получения данных из API:

public function get_city(){ 
    $m_url = URL_API; 
    $function = "get_location"; 
    $i = $_REQUEST['id']; 
    $url = $m_url . "/" . $function . "?" . "t=city" . "&" . "i=".$i; 
    $json_data = file_get_contents($url); 
    $data = json_decode($json_data); 
} 
+0

любая ошибка u получить в консоли? –

+0

нет, я не получаю @ManinderpreetSingh –

ответ

1

Ваша функция делает t вернуть что-либо в ajax вам необходимо echo json_decode

public function get_city(){ 
     $m_url = URL_API; 
     $function = "get_location"; 
     $i = $_REQUEST['id']; 
     $url = $m_url . "/" . $function . "?" . "t=city" . "&" . "i=".$i; 
     $json_data = file_get_contents($url); 
     echo $data = json_decode($json_data);// use echo here 
    } 
+0

Я добавляю эхо, но все тот же @Saty –

+0

Как насчет моего ajax? –

0

Вам не нужен json_decode(), просто напечатайте $ json_data. Потому что он уже возвращается как строка файлом_get_contents().

public function get_city(){ 

    $m_url = URL_API; 
    $function = "get_location"; 
    $i = $_REQUEST['id']; 
    $url = $m_url . "/" . $function . "?" . "t=city" . "&" . "i=".$i; 
    $json_data = file_get_contents($url); 
    echo $json_data; 


} 

Преобразование возвращенных данных в объект JSON. А затем использовать его:

success: function(data) { 
     var jsonObj = JSON.parse(data); 
     $('select#city').html(''); 
     for (var i = 0; i < jsonObj.length; i++) { 
     $("<option />").val(jsonObj[i].code) 
      .text(jsonObj[i].name) 
      .appendTo($('select#city')); 
     } 
    } 
+0

Я добавлю ваш совет, но ничего не делаю. но спасибо. как насчет моего аякса? –

+0

Преобразование возвращенной строки в объект JSON. Вам это не хватает. –

+0

Я конвертировал, но все еще пуст –

0

Имея echo $json_data;, теперь пытаются поставить error обратного вызова в Ajax, так что вы увидите ошибочный ответ вашего запроса. Оттуда вы поймете, что пошло не так в процессе.

error: function(err){ 
    console.log(err.responseText); 
} 
+0

нет ошибки/ответ друга. спасибо за ваши советы –

+0

Вместо 'data: { id: $ (this) .val() },' должно быть 'data: { 'id': id },' поскольку у вас есть 'var id = $ (this) .val() '. – graceth

Смежные вопросы