IE8 проблема с функцией JavaScript, которая вызывает себя в setTimeout - PullRequest
3 голосов
/ 04 февраля 2011

у меня есть функция поиска, определенная в javascript

var locID;

function locateMe()
{
    if(locID > 0)
    {
        // i do a jquery post here
    }

    setTimeout(locateMe, 2000);
} 

// my document ready function is here, and inside it, at the end of it
// i do this
locID = 0;
locateMe();

когда я тестирую этот код в Firefox, функция locateMe вызывается каждые две секунды и работает как положено. когда я тестирую код в IE8, функция никогда не вызывается (по крайней мере, она никогда не вызывается из того, что я вижу с помощью инструментов разработчика IE)

примечание: в обработчике события click определен код для класса zone_row, который изменяет locID. опять же в firefox все работает как положено. Странно то, что в IE при нажатии на zone_row функция будет вызываться ONCE. Я вижу это как в инструментах разработчика, так и в результате действия этого поста jquery.

Я подумал, что с IE есть какая-то аномалия, с которой я еще не знаком. что я делаю не так?

РЕДАКТИРОВАТЬ: изменено "locateMe ();" найти меня внутри вызова setTimeout.

ОБНОВЛЕНИЕ: добавление большего количества моего кода (для каждого запроса в комментариях), чтобы показать место размещения (хотя и не намного больше кода, чем мой первый пост).

<script type="text/javascript">
    var z_items;
    var locID;

    function locateMe()
    {
            if(locID > 0)
            {
                    // my jquery post is here                   
            }   

            setTimeout(locateMe, 2000);
    }

    $(document).ready(function()
    {
            // ... some click events and get requests here ...

            locID = 0;
            locateMe();
    });
</script>

Я также попытался обернуть вызов в setTimeout (без эффекта) и изменить DOCTYPE (это фактически заставляло IE никогда не вызывать функцию, в отличие от того, где он вызывает ее ОДИН РАЗ и никогда больше).

Ответы [ 3 ]

2 голосов
/ 07 февраля 2011

проблема решена. я нашел ответ на другую проблему, которую я имел из этого сообщения:

Предотвращение кэширования в браузере результата вызова jQuery AJAX

после добавления $ .ajaxSetup ({cache: false}); к моей функции готовности документа, это решило эту проблему тоже. похоже, все это время это была проблема кеширования.

1 голос
/ 09 февраля 2012

Я обнаружил, что для IE (даже для IE9), если вы вкладываете самозванную функцию в анонимную функцию, она работает.Но похоже, что проблема Тоддемана была связана с частью AJAX.

Таким образом, код будет:

function locateMe()
{
    /* ... */   

    //IE way (still works in Chrome and FF):
    setTimeout(function () { locateMe(); }, 2000);

    //original: setTimeout(locateMe, 2000);
}
0 голосов
/ 04 февраля 2011

Использование

setTimeout( locateMe, 2000 );
...