29.03.2016, 08:57
|
Профессор
|
|
Регистрация: 11.03.2013
Сообщений: 778
|
|
Блин, не выходит.Как не изголяюсь , либо ошибка, либо не кешерует.
$(function() {
var cache =[];
var url = "/modules/mod_search_auto/ajax.php";
$('select[name="mark"]').change(function() {
var m_id = this.name + '=' + this.value;
if(cache=[data]){$('#brn').html(cache);}
else{
$.ajax({
type:"POST",
url:url,
data: m_id,
success:function(data){
cache = [data];
$('#brn').html(cache);
// }
}
})
}
});
})
Последний раз редактировалось ureech, 29.03.2016 в 09:07.
|
|
29.03.2016, 12:48
|
Профессор
|
|
Регистрация: 11.03.2013
Сообщений: 778
|
|
так и не смог добиться кеширования. Может кто подскажет почему.Последний вариант такой.
var cache=[];
$(function(data) {
var url = "/modules/mod_search_auto/ajax.php";
var cacheData = cache[data];
$('select[name="mark"]').change(function() {
// var cacheData = cache[data]; пробовал и сюда ставить
var mid = this.name + '=' + this.value;
if(cacheData){
$('#brn').html(cacheData);
}else{
$.ajax({
type:"POST",
url:url,
data: mid,
success:function(data){
$('#brn').html(data);
cache[data] = data;
}
})
}
})
})
|
|
29.03.2016, 18:01
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
Вернемся к варианту пост#9 (потому что последний - действительно... последний)
Сообщение от ureech
|
Сделал так
$('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])
}
})
}
});
Но не кеширует.
|
Чтобы кеш все помнил, его определение var cache =[]; нужно вынести на глобальный уровень (как в последнем варианте )
Потом, мне кажется, вы запутались с переменными data:
data в строках 3 - 12 и в строках 13-16 - это разные переменные,
Первая - это значение, которое вы берете из html и передаете в запросе на сервер. (но не проверяли кеш на ее наличие и не запомнили в кеш ).
Вторая - определяется в строке 13 как параметр функции и представляет ответ сервера (что там - я, например, не знаю).
Поэтому строка 15
cache[data] = data;
- что это значит?
Эту переменную, во избежание путаницы, лучше обозвать по-другому.
С учетом вышеизложенного можете попробовать снова. В разных ваших вариантах есть отдельные правильные мысли, но они перемешаны с ошибками
|
|
29.03.2016, 18:39
|
Аспирант
|
|
Регистрация: 22.08.2015
Сообщений: 71
|
|
ureech,
(function(){
var cache ={};
$('select[name="mark"]').change(function() {
var data0 = this.name + '=' + this.value;
if(cache[data0]){
$('#brn').html(cache[data0]);
} else {
$.ajax({
type:"POST",
url:"/modules/mod_search_auto/ajax.php",
dataType:"html",
data: data0,
success: function(response) {
$('#brn').html(response);
cache[data0] = response;
// alert(cache[data0])
}
});
}
});
})();
|
|
29.03.2016, 21:45
|
Профессор
|
|
Регистрация: 11.03.2013
Сообщений: 778
|
|
Ни хрена не хочет, по разному пробовал и как Alex_63, написал тоже. Может где запрет на кеширование, в заголовках ответа
Cache-control:no-cache...
Pragma:"no-cache"
Это результат или причина?
|
|
29.03.2016, 21:50
|
Профессор
|
|
Регистрация: 11.03.2013
Сообщений: 778
|
|
Сообщение от Dilettante_Pro
|
Вторая - определяется в строке 13 как параметр функции и представляет ответ сервера (что там - я, например, не знаю)
|
В ответе строка, html код
<option id='Vulcan' value='1002' >Vulcan</option><option id='Rapide S' value='1002' >Rapide S</option>
|
|
30.03.2016, 10:13
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
Сообщение от ureech
|
Ни хрена не хочет, по разному пробовал и как Alex_63, написал тоже. Может где запрет на кеширование, в заголовках ответа
Cache-control:no-cache...
Pragma:"no-cache"
Это результат или причина?
|
ureech,
Cache-control:no-cache... Pragma:"no-cache" здесь совершенно ни при чем - ваш кеш - совсем не кеш, а просто переменная типа массив.
Вариант Alex_63 почти правильный, он устранил все ошибки, за исключением одной:
var data0 = this.name + '=' + this.value;
if(cache[data0]){
Индекс массива - это целое число, начиная с 0.
В качестве индекса вам нужно использовать целые числа, однозначно связанные с парой this.name this.value.
Пример реализации такой индексации пар this.name this.value
<head>
<title>Untitled Page</title>
</head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script>
window.onload = function () {
$('select').change(function () {
alert($(this).data("ind") + $(this)[0].selectedIndex);
});
}
</script>
<body>
mark
<select data-ind="100" name="mark">
<option >Выберите вариант</option>
<option value="11">первый</option>
<option value="22">второй</option>
<option value="33">третий</option>
<option value="44">четвертый</option>
</select>
<br />
brend
<select data-ind="200" name="brend">
<option >Выберите вариант</option>
<option value="11">первый</option>
<option value="22">второй</option>
<option value="33">третий</option>
<option value="44">четвертый</option>
</select>
</body>
</html>
Последний раз редактировалось Dilettante_Pro, 30.03.2016 в 11:39.
|
|
30.03.2016, 13:36
|
Профессор
|
|
Регистрация: 11.03.2013
Сообщений: 778
|
|
Блин,слва Богу и Dilettante_Pro, добил, эти массивы.
$(function() {
var url = "/modules/mod_search_auto/ajax.php";
var cache ={};
$('select[name="mark"]').change(function() {
var data = this.name + '=' + this.value;
var index = this.options.selectedIndex;
if(cache[index]){
$('#brn').html(cache[index]);
}else{
$.ajax({
type:"POST",
url:url,
data: data,
success:function(response){
$('#brn').html(response);
cache[index] = response;
}
})
}
})
Всем спасибо
|
|
30.03.2016, 14:07
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
ureech,
В таком варианте
var index = this.options.selectedIndex;
нужен отдельный кеш для каждого селекта
а в варианте из пост№17
var index = $(this).data("ind") + $(this)[0].selectedIndex
- один кеш для всех
Последний раз редактировалось Dilettante_Pro, 30.03.2016 в 14:10.
|
|
30.03.2016, 14:13
|
Профессор
|
|
Регистрация: 11.03.2013
Сообщений: 778
|
|
Понял, поправлю.
|
|
|
|