2014-03-29 2 views
0

따라서 사용자가 .search 필드에 3 초 동안 입력을 중단 할 때마다 데이터를 페이지 getData.php으로 전송해야하는 곳에서 코드를 작성했습니다. 하지만 사용자 유형이 더 느리다고 (1 초당 1 문자와 같이) 또는 약 1 초 후에 타이핑을 시작하면 각 문자를 더 많은 Ajax 요청 (많은 문자 수에 따라 약 15/20)으로 보냅니다. 오히려 전체 단어에 대한 1 요청.Ajax가 너무 많은 요청을 내고 있습니다.

이 내 코드입니다 : EDIT FOR BETTER UNDERSTANDING


$(".search").on('input', function() { 
    $(".search").keyup(function() { 
     timer = setTimeout(function() { 

      $.ajax({ 
       type: "POST", 
       url: "getData.php", 
       data: {search: $(".search").val()} 
      }).done(function(data) { 
       $(".searchReturn").text(data); 
       $(".loading").hide(); 
      }); 

      $(".searchReturn").fadeIn(750); 

     }, 3000); 

     $(".search").keydown(function() { 
      clearTimeout(timer); 
     }); 

     $(".loading").fadeIn(250); 
    }); 

    $(".searchReturn").hide() 
}); 
내가 필드에 "테스트"를 입력 한 말, 그때는 "테스트"를 다시 1 초 후 가진 "testtest"을 입력했습니다. 내가 이것을했을 때 나는 55 개의 Ajax POST를 얻었다. 나는 이것이 어떻게되는 것을 멈추게 할 것인가를 묻고있다.

+1

이벤트 처리기 안에 이벤트 처리기가 있으며 모든 입력에서 'oninput' 이벤트 처리기가 래핑되고 wazzoo 위로 이벤트 처리기가 쌓여 있습니다. – adeneo

+0

이 그것을 할 방법입니다 -> http://jsfiddle.net/adeneo/9Z78C/ – adeneo

+0

@adeneo 예, 감사합니다, 나는 많은 오류를 발견했습니다,하지만 난 내 요구에 맞게 고정했습니다 . – user3314062

답변

0

add clearTimeout (timer); in keyup handler

$(".search").on('input', function() { 
    $(".search").keyup(function() { 
     clearTimeout(timer); 
     timer = setTimeout(function() { 

      $.ajax({ 
       type: "POST", 
       url: "getData.php", 
       data: {search: $(".search").val()} 
      }).done(function(data) { 
       $(".searchReturn").text(data); 
       $(".loading").hide(); 
      }); 

      $(".searchReturn").fadeIn(750); 

     }, 3000); 


     $(".loading").fadeIn(250); 
    }); 

    $(".searchReturn").hide(); 
}); 
+0

나는 그 자신을 생각했다. 그러나 나는 왜 당신이 개입 keydown으로 여러 keyup 응답이 있다고 생각하는지 궁금하다. – jfriend00

+0

각 처리기에 console.log를 추가하고 각 함수를 호출 할 때 하나씩 (중복이 없음) 확인하십시오 - 어쩌면 함수를 호출하는 순서가 잘못되었을 수도 있습니다 –

+0

잘못된 것입니다. 'keyup' 처리기는 ** 내부에 있습니다 **' input' 이벤트 핸들러인데, 그게 진짜 문제입니다. – adeneo

관련 문제