#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>';
}
?>