2013-11-26 1 views
0
$(document).ready(function() { 
    var searchValue = ""; 
    setInterval(checkTextboxChanged, 0.5); 
    function checkTextboxChanged() { 
     var currentValue = $('#dept').val(); 
     if (currentValue != searchValue) { 
      searchValue = currentValue; 
      TextboxChanged(); 
     } 
    } 
    function TextboxChanged() { 
     $.ajax({ 
     url: "<?php echo base_url();?>check_price.html", 
     data: "dept="+$("#dept").val()+"&arrive="+$("#arrive").val()+"&parking="+$("#parking").val(), 
     success: function(result){ 
      $("#check_price").html(result); 
     } 
     }); 
    } 

}); 

이것은 Chrome, Firefox에서는 잘 작동하지만 IE에서는 작동하지 않습니다. setInterval 메소드에서 문제가 있습니까? 그것은 IE를 지원합니까?IE에서 jquery ajax 호환성

+0

IE에서 0.5 밀리 초가 허용되는 값이 아닐 수 있습니다. – davidkonrad

+1

예, 즉 setInterval을 지원합니다. 이 코드는 .5ms 간격을 사용하는 대신 변경 이벤트 또는 유사한 이벤트를 사용해야합니다. 나는 당신의 코드에서 IE에서 질식 할만한 특정 것을 보지 못했다. –

+0

@ davidkonrad 귀하의 가정이 옳습니다. 나는 단지 0.5ms를 1로 변경하고 잘 동작한다. 아주 많이 선생님 께 감사드립니다. – Brett

답변

1

setInterval 시간 제한은 실제로는 입니다. 사용하는 브라우저에 관계없이입니다.

setInterval의 것은 페이지가 준비되었는지 여부에 관계없이 지정된 간격으로 이벤트가 트리거된다는 것입니다.

간격 시간이 짧으면 사이트에서 처리 할 수있는 것보다 빠르게 해고되는 이벤트가 쌓일 수 있습니다.

ajax가 포함 된 여기에 사용 된 고전적인 예는 다음과 같습니다. ajax 이벤트를 완료하는 데 0.5 초가 걸리는 경우 (쉽게 가능할 수 있음) 결국 여러 이벤트가 가상적으로 동시에 호출됩니다 . 이렇게하면 동시 호출로 인해 아약스 서비스가 중단되고 응답 시간이 느려지고 브라우저의 문제가 더욱 악화됩니다.

이런 종류의 일로, 거의 항상 자기 재발 사 setTimeout 호출을 사용하는 것이 더 좋으며, 이는 이전 이벤트가 완료 될 때까지 이벤트가 트리거되지 않도록합니다.

그러나 어느 경우 든 0.5ms의 간격은 모든 종류의 간격 처리에 대한 미친 짧은 시간 범위입니다. 짧은 시간 내에 성능 문제가 발생할 가능성이 매우 높습니다.

반 밀리 초가 아니라 실제로 0.5 초가 될 것으로 생각합니다. 이 경우 0.5이 아닌 500으로 변경해야합니다.

관련 문제