2012-05-13 3 views
1
$(function(){ 
    $("input[type=text]").keypress(function(){ 
     $("#loader").load("saveinputtodatabase.php", {...}); 
    }); 
}); 

Это хорошо работает в моем коде. Он сохраняет данные в базе данных каждый раз, когда пользователь вводит что-то на входе. Но я знаю, что это не справедливо для сервера, потому что он будет загружать много один и тот же файл много раз, тем самым увеличивая пропускную способность больше, чем нужно.JQuery: отправка данных без необходимости нажатия кнопки отправки?

Как я могу заставить его загружать «saveinputtodatabase.php» только в том случае, если прошло 10 секунд с тех пор, как пользователь нажал клавишу?

ответ

2

Вы можете использовать setTimeout и clearTimeout.

$(function(){ 
    var timeout = 10000; // 10 seconds 
    var tmt = null; 
    $("input[type=text]").keypress(function() { 
    if (tmt) clearTimeout(tmt); 
    tmt = setTimeout(function() { 
     $("#loader").load("saveinputtodatabase.php", {...}); 
    }, timeout); 
    }); 
}); 
0
$(function(){ 
    $("input[type=text]").keypress(function(){ 
     var t=setTimeout(function(){ 
      $("#loader").load("saveinputtodatabase.php", {...}) 
     },10000); 
    }); 
}); 
+0

Это не делает то, что было предложено. Количество запросов остается неизменным, все они просто задерживаются. –

1
var timeout; 
$('input[type=text]').keypress(function() { 
    if(timeout) { 
     clearTimeout(timeout); 
     timeout = null; 
    }  
    timeout = setTimeout(somefunc, 10000) 
}); 
function somefunc() { 
    $("#loader").load("saveinputtodatabase.php", {...}); 
} 
0

Попробуйте

$(function(){ 
    $("input[type=text]").keypress(function(){ 
    save();   
}); 
}); 
function save(){ 
setTimeout($("#loader").load("saveinputtodatabase.php", {...}),10000) 
} 
+0

Это не делает то, что было задано. Количество запросов остается неизменным, все они просто задерживаются. –

0

Проверьте эти underscore.js функции:

http://documentcloud.github.com/underscore/#throttle

Создает и возвращает новую, дросселированную версию переданной функции, , которая при повторном вызове будет фактически называть функцию не более одного раза за каждые миллисекунды ожидания. Полезно для событий ограничения скорости, которые происходят быстрее, чем вы можете не отставать.

http://documentcloud.github.com/underscore/#debounce

Создает и возвращает новую версию противодребезговой защиты переданной функции , которая будет отложить его выполнение, пока не ждать миллисекунд , прошедшее с момента последнего времени он был вызван. Полезно для реализации поведения , которое должно произойти только после того, как вход остановился. Например: рендеринг предварительного просмотра комментария Markdown, пересчет макет после того, как окно перестало изменяться, и так далее.

0
$('textarea').on('keyup', _.throttle(_.debounce(function() { 
$.ajax(...); 
}, 2000), 60000)); 

Это сохранит ваши данные, как только пользователь прекращает печатать, по крайней мере, 2 секунд, но не более чем один раз в минуту. checkout underscore.js для получения дополнительной информации