Php 在非活动超时后发送请求
我想写一个类似于谷歌翻译表单的代码 当我在输入文本框中输入字母时,有一个等待新输入的Php 在非活动超时后发送请求,php,jquery,ajax,Php,Jquery,Ajax,我想写一个类似于谷歌翻译表单的代码 当我在输入文本框中输入字母时,有一个等待新输入的0.5秒延迟。如果没有收到新的输入,请求将发送到服务器,服务器将在输出文本框中返回结果 我写了一些东西,但不完整。你能帮我吗 $(document).ready(function(){ $('#source').keyup(function(){ var keyUpTime = $.now(); setTimeout(function(){ if($.now() - keyUpTi
0.5
秒延迟。如果没有收到新的输入,请求将发送到服务器,服务器将在输出文本框中返回结果
我写了一些东西,但不完整。你能帮我吗
$(document).ready(function(){
$('#source').keyup(function(){
var keyUpTime = $.now();
setTimeout(function(){
if($.now() - keyUpTime >= 500) {
sendValue($('#source').val());
}
},500);
});
});
function sendValue(str){
$.post("ajax.php",{ sendValue: str }, function(data){
$('#result_box').html(data.returnValue);
}, "json");
};
存储超时,以便在发生新事件时可以覆盖它,但如果没有提供任何进一步的信息,则会将其发送出去。简单地说:
var ajaxTimeout = null;
$('#source').on('keyup', function(e){
var val = $(this).val();
if (ajaxTimeout){
clearTimeout(ajaxTimeout);
}
ajaxTimeout = setTimeout(function(){
sendValue(val);
}, 0.5e3); // 0.5 seconds
});
这就是我的习惯:
var keyUpTime = 0;
var t = 0;
var executeAfterOneSecond = false;
$('#source').keyup(function(){
if(executeAfterOneSecond == false){
executeAfterOneSecond = true;
t = setTimeout(function(){
executeAfterOneSecond = false;
sendValue($('#source').val());
}, 600);
}
keyUpTime = $.now();
setTimeout(function(){
if($.now() - keyUpTime >= 200) {
clearTimeout(t);
executeAfterOneSecond = false;
sendValue($('#source').val());
}
},200);
});
如果两封信之间的间隔小于200ms,则不发送请求。如果超过600毫秒,且请求尚未发送,则请求将自动转发。如果两个字母之间的间隔超过200毫秒,则发送请求。每个键控需要取消旧计时器并启动新计时器。那么你就不需要与
keyUpTime
进行比较——如果计时器没有被取消,那么它一定已经超过了超时时间。好吧,这对我来说不起作用。像我的代码一样做同样的事情。在我的代码中,var keyUpTime应该是全局的。我找到了问题的解决方案。哎呀,忘了你需要先清除超时。这是一个例子。