Есть два связанных option
поля в форме для фильтрации автомобилей по маркам и моделям: mark -> model
. При выборе марки подгружаются модели. Проблема в том что марки не подгрудаются с сервера с заранее, а только в момент клика на первое поле с марками при помощи $('#mark').focus
, и получается что при каждом клике на выпадающее меню марок отправляется запрос, что создает лишнюю нагрузку на сервер.
Как можно исправить эту проблему не меняя код сервера а только модифицировав логику ajax
запросов?
Сама форма:
<div>
<select id="mark" name="mark" data-url="get_all_proposes/get_all_marks">
<option value="">Select mark</option>
</select>
</div>
<div>
<select id="model" name="model" data-url="get_all_proposes/get_model_by_mark">
<option value="">Select model</option>
</select>
</div>
Код js
:
$(document).ready(function () {
//Get marks set.
$('#mark').focus(function(event) {
$.ajax({
url : 'get_all_proposes/get_all_marks',
type : 'get',
dataType: 'json',
success: function (data) {
var select = $('#mark');
$.each(data, function(index, value) {
var optionMark = $('<option>');
optionMark.val(value).text(value).appendTo(select);
});
}
});
});
//Get models set.
$('#mark').change(function() {
$.ajax({
url : 'get_all_proposes/get_model_by_mark',
type : 'get',
data : {
'mark' : this.value
},
dataType: 'json',
success : function(data) {
var optionModel = $('#model');
$.each(data, function(index, value) {
optionModel.append($('<option>').val(value).text(value));
});
}
});
});
});
Если список марок фисированный и не зависит от других параметров (что скорее всего так), то можно заполнить его сразу после создания страницы:
$(document).ready(function () {
//Get marks set.
$.ajax({
url: 'get_all_proposes/get_all_marks',
type: 'get',
dataType: 'json',
success: function (data) {
var select = $('#mark');
$.each(data, function (index, value) {
var optionMark = $('<option>');
optionMark.val(value).text(value).appendTo(select);
});
}
});
//Get models set.
$('#mark').change(function () {
$.ajax({
url: 'get_all_proposes/get_model_by_mark',
type: 'get',
data: {
'mark': this.value
},
dataType: 'json',
success: function (data) {
var optionModel = $('#model');
$.each(data, function (index, value) {
optionModel.append($('<option>').val(value).text(value));
});
}
});
});
});
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Дан цикл с большим количеством итерацийДан массив с четырьмя элементами
Есть таблица пользователей у которых есть непогашенный кредитВ этой таблице есть столбец date здесь отображается дата когда должник должен...