Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在非活动超时后发送请求_Php_Jquery_Ajax - Fatal编程技术网

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应该是全局的。我找到了问题的解决方案。哎呀,忘了你需要先清除超时。这是一个例子。