Значение по умолчанию в цепочке выпадающего списка

#php #jquery #sql #ajax #dropdown

#php #jquery #sql #ajax #выпадающий список

Вопрос:

Я новичок в ajax, поэтому я учусь, и я застрял и пытался везде искать то, что мне нужно, но безрезультатно. У меня есть выпадающий список со списком местоположений. Однако, основываясь на другом выпадающем списке, я хочу вернуть местоположение по умолчанию в список. Поэтому, если я выберу ресурс A, его местоположение по умолчанию будет автоматически заполнено в выпадающем списке, но все равно даст мне альтернативы через список $locations, чтобы выбрать другое местоположение. Я могу вернуть правильные данные в div, но я не знаю, как заполнить их в выпадающем списке. Ниже приведено то, что у меня есть для заполнения div. Любая помощь о том, как я мог бы отправить его в выпадающий список с сохраненным списком $locations, но это значение выбрано по умолчанию, было бы оценено.

Выпадающие списки

     <div class="form-group">
                    <label class="control-label" for="asset_id" id="asset_id" >
                        Asset
                    </label>
                    <?php
                    echo $this->Form->input( 'WorkorderAsset.0.asset_id', array(
                    'type'=>'select',
                    'data-placeholder'=>'Select An Asset Type From Above...',
                    'class'=>'chzn-select form-control asset',
                    'empty' => true,
                    'id'=>'asset',
                    'label'=>false,
                    'after' => '<div class="input-group-addon"><i class="fa fa-exclamation text- 
       danger"></i></div></div>',
                    'between' => '<div class="input-group">',
                                            ));
                    ?>
                </div>


    <div class="row">
                <div class="col-md-6">
                    <?php
                    echo $this->Form->input( 'location_id', array(
                    'id'=> 'location',
                    'options'=>$locations,
                    'class'=>'chzn-select form-control',
                    'empty' => true,
                    'z'=>'Select A Location',
                    'required'=>false,
                    'between' => '<div class="input-group">',
                    'after' => '<div class="input-group-addon"><i class="fa fa-exclamation text- 
                     danger"></i></div></div>',
                                            ));
                    ?>
                <div class="row">
                    <div class="col-md-6">






  $('#asset').on('change', function() {
        var id = $('#asset').val();     
        if (id != "") {
            $.ajax({
                type: 'POST',
                url: '/workorders/workorders/getInfo/'  id  '.json',
                dataType: 'html',
                beforeSend: function(xhr) {
                    $(".overlay").show();
                    xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
                },
                success: function( response ) {
                    console.log(response);
                    $('#location').html(response);
                },
                error: function (jqXHR, textStatus, errorThrown) {
                    console.log(jqXHR);
                    console.log(textStatus);
                    console.log(errorThrown);
                },
                complete: function() {
                    $(".overlay").hide();
                },
            });

        }
        
else {
            alert("Please select an asset");

        }
                
            });
 

В моем контроллере

 public function getInfo($id=null)
{
    
    $locate = $this->request->data = $this->Asset->find('first', array(
    'conditions'=>array(
    'Asset.id' => $id
            ),
    'contain'=>array(
    'Location'=>array(
    'fields'=>array('Location.name')
            ),
            )
            ));
    if ($this->request->is('ajax')) {
        $this->set( 'locate', $locate);
        }
}
 

В моем JSON

  <?php
 $location = (!empty($locate['Location']['name'])) ? $locate['Location']['name'] : 'amp;nbsp;';
 ?>
 <div >

    
        <?  echo "Default Asset Location:" . " " .  $location ?>
    
    
 </div>
 

Ответ №1:

Я все понял. Ответ заключается в следующем.

Вид:

  <div class="form-group">
                <label class="control-label" for="asset_id" id="asset_id" >
                    Asset
                </label>
                <?php
                echo $this->Form->input( 'WorkorderAsset.0.asset_id', array(
                'type'=>'select',
                'data-placeholder'=>'Select An Asset Type From Above...',
                'class'=>'chzn-select form-control asset',
                'empty' => true,
                'id'=>'asset',
                'label'=>false,
                'after' => '<div class="input-group-addon"><i class="fa fa-exclamation 
text- 
   danger"></i></div></div>',
                'between' => '<div class="input-group">',
                                        ));
                ?>
            </div>


<div class="row">
            <div class="col-md-6">
                <?php
                echo $this->Form->input( 'location_id', array(
                'id'=> 'location',
                'options'=>$locations,
                'class'=>'chzn-select form-control',
                'empty' => true,
                'z'=>'Select A Location',
                'required'=>false,
                'between' => '<div class="input-group">',
                'after' => '<div class="input-group-addon"><i class="fa fa-exclamation 
text- 
                 danger"></i></div></div>',
                                        ));
                ?>
            <div class="row">
                <div class="col-md-6">



    $('#asset').on('change', function() {
        var id = $('#asset').val();

        if (id != "") {
            $.ajax({
                type: 'POST',
                url: '/workorders/workorders/getInfo/'  id  '.json',
                dataType: 'html',
                success: function( response ) {
                    console.log(response);
                
        
                    $("#location").attr("data-placeholder", response);
                    $('#location' ).val('').trigger( 'chosen:updated' );
                },
                error: function (jqXHR, textStatus, errorThrown) {
                    console.log(jqXHR);
                    console.log(textStatus);
                    console.log(errorThrown);
                },
                complete: function() {
                    $(".overlay").hide();
                },
            });

        }
        
else {
        }
                
            });
 

Контроллер:

 public function getInfo($id=null)
{

    if (!$id) {
        throw new NotFoundException();
        }

    $locate = $this->Asset->find('first', array(
    'conditions'=>array(
    'Asset.id'=>$id
        ),
    'contain'=>array(
    'Location'=>array(
    'fields'=>array(
    'Location.id',
    'Location.name',
        ),
    'order'=>array('Location.name'=> 'asc')
        )
        )
        ));

    #pr($groupSelection);
    #exit;

    $this->set(compact('locate'));
}
 

JSON

   <?php
  if (!empty($locate['Location'])) {
      echo '<option value="' . $locate['Location']['id']  . '">' . $locate['Location'] 
 ['name'] . '</option>';
  }
   else {
      echo '<option value="">' . __('No Options Available') . '</option>';
  }
  ?>