Оформить скрипт
Здравствуйте.Написал скрипт, спасибо за помощь laimas, можно как то по другому его "оформить", а то как то не красиво. Скрипт состоит из нескольких запросов.Вот два для примера
$('select[name="brend"]').change(function() {
var data = this.name + '=' + this.value;
var index = this.options.selectedIndex;
var id = this.options[index].text;
sessionStorage.setItem('type_title', id);
$.ajax({
type:"POST",
url:"/modules/mod_search_auto/ajax.php",
data: data,
success:function(data){
$('#bod').html(data);
}
})
});
$('select[name="mark"]').change(function() {
var data = this.name + '=' + this.value;
var index = this.options.selectedIndex;
var id = this.options[index].text;
sessionStorage.setItem('model_title', id);
$.ajax({
type:"POST",
url:"/modules/mod_search_auto/ajax.php",
data: data,
success:function(data){
$('#brn').html(data);
}
})
});
Может можно повторения как то систематизировать, что ли? |
Слишком много одинаковых HTTP запросов на сервер. Почему результаты не кэшируются?
|
ureech,
В select`ы добавить класс и атрибуты data- (http://htmlbook.ru/blog/atribut-data) (можно и без класса, только атрибуты data-, в т.ч. и общий для группы селектов вместо класса) В этих атрибутах задавать имя хранимого параметра, id размещения результата и т.п., например: <select data-class="group" data-name="type_title" data-resid="#bod"> При таких атрибутах для всех селектов с data-class="group" легко пишется одна универсальная функция запроса. |
Dilettante_Pro,OK, спасибо.Буду разбираться.
Цитата:
|
Цитата:
Выбрал в селекте значение A => запрос к серверу Выбрал в селекте значение B => запрос к серверу Выбрал в селекте опять значение A => опять запрос к серверу? Зачем последняя операция, если был выбор на первом шаге и её можно в каком-нибудь буфере сохранить и отдавать клиенту? |
Решил кешировать первый запрос. Переписал ф-цию так
$(function() {
var cache
callback = function (data) {
$('#brn').html(data);
};
$('select[name="mark"]').change(function() {
var data = this.name + '=' + this.value;
if (cache) {
callback(cache);
} else {
$.ajax({
type:"POST",
url:"/modules/mod_search_auto/ajax.php",
dataType:"html",
data: data,
cache:true,
success: function(data) {
cache = data;
callback(cache);
}
})
}
});
});
Но что то не хочет кешировать, что нужно поправить? |
Цитата:
Идея такая: Пусть на этапе инициализации cache = []. Считали значение из select[name="mark"] (например, номер опции). Номер есть в массиве cache? Достали по номеру инфу записали в #brn. Иначе выполнили HTTP запрос и в функции обратного вызова success записали инфу по номеру в массив и в #brn. И вот таким образом создается разреженный массив, который позволяет уменьшить нагрузку на сервер, да и клиенту не придется ждать, пока придет ответ с сервера, если он есть в кэше. А если есть желание, лучше юзать фичи Set/Map в ES6. Скажем в Set номера опций, а в Map - отображение их в данные. |
ОК, понял, сенкс.
|
Сделал так
$('select[name="mark"]').change(function() {
var cache =[];
var data = this.name + '=' + this.value;
if(cache[data]){
$('#brn').html(cache[data]);
//alert('11111111')
} else {
$.ajax({
type:"POST",
url:"/modules/mod_search_auto/ajax.php",
dataType:"html",
data: data,
success: function(data) {
$('#brn').html(data);
cache[data] = data;
// alert(cache[data])
}
})
}
});
Но не кеширует. |
потому что массив cache всегда пустой. Да и 15 строчка весьма странная, учитывая что в js нет ассоциативных массивов.
|
| Часовой пояс GMT +3, время: 11:18. |