jQuery ajax цепочка выбора выпадающего адреса страны, штатов, городов в Cake PHP 3.8 - PullRequest
0 голосов
/ 03 апреля 2020

Я хочу выбрать цепочку из выпадающего списка, чтобы получить адреса, в то время как пользователь выбирает страну выбора Индонезия, затем отображает выбор страны штата Джакарта, или пользователь выбирает страну Малайзия, а затем отображает страну выбора Сабах.

ниже таблицы MySQL

Countries table
+--ID--+----Negara----+
|  1   |   Indonesia  |
|  2   |    Malaysia  |
+------+--------------+

States table
+--ID--+---countrie_id---+---Provinsi----+
|  1   |          1      |    Jakarta    |
|  2   |          1      |     Bali      |
|  3   |          2      |     Sabah     |
|  4   |          2      |    Serawak    |
+------+-----------------+----------------+

результат, который я хочу, ниже

select options countries

<select name="countrie">
  <option>Indonesia</options>
</select>

select options states

<select name="states">
   <option>Jakarta</option>
   <option>Bali</option>
</select>

контроллер Страны

public function index(){
  $negara = $this->Countries->find('all')->extract('Negara');
  $this->set(compact('negara'));
}

public function getCountries(){
  $negara = $this->Countries->find('all')->extract('Negara');

  return $this->response
    ->withType('application/json')
    ->withStringBody(json_encode([
      'jQueryNegara' => $negara,
      'result' => $result
    ]));
}

контроллер состояний

public function index(){
  $provinsi = $this->States->find('all')->extract('Provinsi');
  $this->set(compact('provinsi'));
}

public function getStates(){
  $provinsi = $this->Countries->find("all")->extract('Provinsi');

  return $this->response
    ->withType('application/json')
    ->withStringBody(json_encode([
      'jQueryProvinsi' => $provinsi,
      'result' => $result
    ]));
}

Форма ввода городов add.ctp

<?= $this->Form->control('countrie_id', [
  'type' => 'select',
  'id' => 'jQueryNegara',
  'options' => $negara 
]); ?>

<?= $this->Form->control('province_id', [
  'type' => 'select',
  'id' => 'jQueryProvinsi',
  'options' => $provinsi 
]); 
?>

jQuery ajax внутри городов add.ctp

$(function(){
  $('#negara').on('change', function() {
    var id = $(this).val();
    var targeturl = '<?= Router::url(["controller"=>"countries","action"=>"getCountries"]); ?>';
    if(id == '-1'){
      $('#provinsi').html(`<option value="-1">Select State</option>`);
    }else{
      $("#divLoading").addClass('show');
        $('#provinsi').html(`<option value="-1">Select State</option>`);    
          $.ajax({
              type:'post',
              url: targeturl,                  
              data:'id='+id+'&type=state',
              dataType: 'json',
              success:function(result){
                  $("#divLoading").removeClass('show');
                  $('#provinsi').append(result);
              }
          });   
      }
    });
});

Я попытался повторить и исправить ошибку, но все равно не работает. Спасибо за кого-то, кто хочет помочь мне

...