Вставьте флажки в функцию успеха ajax на основе результата предыдущего выпадающего списка
Я использую рюкзак Laravel, и я немного застрял прямо сейчас:
-> Я хотел загрузить несколько флажков из таблицы на основе предыдущего результата выпадающего списка.
Например, у меня есть поле под названием exercise_type
который является раскрывающимся и все параметры в раскрывающемся списке хранятся в таблице, и каждый exercise_type
имеет 10 упражнений, связанных с этим.
Вот value
в таблице есть exercise_type
и каждый value
имеет еще 10 значений.
вот как я добавляю это exercise_type
поле в Crudcontroller.
$this->crud->addField([ // select_from_array
'name' => 'exercise1_type',
'label' => "Exercise 1",
'type' => 'select2',
'entity' => 'Exercise_group',
'attribute' => 'value',
'model' => 'App\Models\Exercise_group',
//'allows_null' => false,
'attributes' => [
'id' => 'exercise',
'OnChange' => 'getexercise()',
]
// 'allows_multiple' => true, // OPTIONAL; needs you to cast this to array in your model;
], 'update/create/both');
Я могу загрузить значения из таблицы до здесь.
А затем я переопределил представление создания представления и добавил это, чтобы добавить флажки в функцию успеха ajax.
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
function getexercise(){
var exercise = $('#exercise').val();
alert(exercise);
$.ajax({
url : "../../getexercise",
type : "POST",
data : { id : exercise },
success: function(response){
// what to put here to bring checkboxes with the name of exercises
as in table
}
});
};
Вот мой маршрут:
Route::post('/getexercise','BlahController@getexercise');
А вот и мой BlahController.php
public function getexercise(Request $request){
$id = $_POST['id'];
$exercises = Exercise_group::where('id', $id)->first();
$exercise_id = $exercises->id;
$exercise_1 = $exercises->exercise1;
$exercise_2 = $exercises->exercise2;
$exercise_3 = $exercises->exercise3;
$exercise_4 = $exercises->exercise4;
$exercise_5 = $exercises->exercise5;
$exercise_6 = $exercises->exercise6;
$exercise_7 = $exercises->exercise7;
$exercise_8 = $exercises->exercise8;
$exercise_9 = $exercises->exercise9;
$exercise_10 = $exercises->exercise10;
return response()->json([
'exercise_id' => $exercise_id,
'exercise1' => $exercise_1,
'exercise2' => $exercise_2,
'exercise3' => $exercise_3,
'exercise4' => $exercise_4,
'exercise5' => $exercise_5,
'exercise6' => $exercise_6,
'exercise7' => $exercise_7,
'exercise8' => $exercise_8,
'exercise9' => $exercise_9,
'exercise10' => $exercise_10,
//'state' => 'CA'
]);
}
Я не могу добавить флажки в функции успеха AJAX все работает просто отлично. Я пробовал эти ссылки, но они не работают как таковые:
РЕДАКТИРОВАТЬ::
Теперь флажки работают так:
$.each(response, function (key, value) {
var li = $('<li><input type="checkbox" name="' + key + '" id="' + key + '"/>' +
'<label for="' + key + '"></label></li>');
li.find('label').text(value);
$('#wkslist').append(li);
console.log(value);
$('#exercise_detail').val(value);
});
но они не показываются хорошим способом, поэтому, если я хочу добавить эти значения флажков в другое раскрывающееся меню в рюкзаке, как я пытаюсь в примере, но не работает:
$('#exercise_detail').val(value);
$this->crud->addField([ // Select2Multiple = n-n relationship (with pivot table)
'name' => "exercise1_type_detail",
'label' => "Exercise 1 : Detail",
'type' => 'select2_multiple',
'attributes' => [
'id' => 'exercise_detail',
//'OnChange' => 'getexercisedetail()',
],
], 'update/create/both');
1 ответ
В вашем ajax-запросе добавьте свойство dataType: 'json'
Предполагая, что ваш JSON выглядит следующим образом,
[{'exercise_id' : 'Barbel',
'exercise1' : 'Flat',
'exercise2' : 'Incline',
'exercise3' : NULL,
'exercise4' : 'Flat',
'exercise5' : NULL,
'exercise6' : 'Flat',
'exercise7' : 'Barbel',
'exercise8' : 'Flat',
'exercise9' : 'Barbel',
'exercise10' : 'Flat'}]
и внутри успеха добавьте следующие строки кода.
if(response){
var data = response[0];
for(var i = 1; i< 10; i++){
if(data['exercise'+i]){
str = '<input type="checkbox" class="exercise+'i'" /> data['exercise'+i] ';
$("#container").append(str);
}
}
}
Приведенный выше пример будет работать для вас. добавьте dataType: 'json' в ваш запрос $.ajax.