2013-11-26 5 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?jQuery ajax совместимость в IE

+0

Возможно, 0,5 миллисекунды не являются приемлемым значением в IE, он требует int – davidkonrad

+1

Да, то есть поддерживает setInterval. этот код плох, вместо того, чтобы использовать интервал .5ms, вы должны использовать событие изменения или подобное событие. Я не вижу ничего конкретного в вашем коде, который бы задохнулся в IE. –

+0

@ davidkonrad Ваше предположение верно. Я просто изменяю 0,5 мс на 1, и он отлично работает. Большое спасибо, сэр. – Brett

ответ

1

setInterval с небольшим таймаутом действительно действительно плохая идея, в зависимости от того, какой браузер вы используете.

Вещь с setInterval заключается в том, что событие запускается в указанный интервал независимо от того, готова ли страница к нему.

С небольшим интервалом времени это может очень легко привести к накапливанию событий, которые срабатывают быстрее, чем сайт может справиться с ними.

Ваше использование здесь, с участием ajax, является классическим примером этого: если событие ajax занимает больше половины секунды, чтобы завершить (что легко возможно), тогда вы получите несколько событий, вызываемых практически одновременно , Это приведет к тому, что ваш сервис ajax будет забит одновременными вызовами, что замедлит время отклика и, в свою очередь, сделает проблему в браузере еще хуже.

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

Однако в любом случае ваш интервал 0,5 мс представляет собой сумасшедший короткий промежуток времени для любого вида обработки интервалов. Вероятно, у вас будут проблемы с производительностью с тайм-аутом, который короткий, что бы вы ни делали.

Я подозреваю, что вы на самом деле намеревались на полсекунды, а не на половину миллисекунды. Если это так, вы должны изменить его на 500, а не на 0.5.

Смежные вопросы