Длинный опрос JQuery не работает в IE - PullRequest
4 голосов
/ 28 апреля 2011

$. Ajax, похоже, не работает в IE.Что мне делать или это просто еще одна ошибка в IE?Нужно ли предоставлять свой код здесь, чтобы получить помощь?Кажется, он не работает ни с одним примером $ .ajax.

Мой код:

function get_info(lines) {
    $.ajax({
        type: "POST",
        cache: false,
        url:  "chat.php?RandomNumber=" + Math.random(),
        data: "type=get_info&lines="+lines+"&RandomNumber=" + Math.random(),
        dataType: "json",
        success: function(msg){
          lines = msg.lines;

          if(msg.new_messages)
          {
            for(i = 0; i < msg.messages.length; i++)
            {
                $('.chat').append("<p>"+msg.messages[i]+"</p>");      
            }
            document.getElementById('chatty').scrollTop = document.getElementById('chatty').scrollHeight;
          }
        },
        complete: function() {
            setTimeout(get_info, 1000, lines); 
        }
    })    

};    

setTimeout(get_info, 1000, 0); 

Ответы [ 2 ]

4 голосов
/ 28 апреля 2011

Теперь я вижу, что вы используете форму setTimeout, которая не работает с IE 1 , 2 :

setTimeout(myFunction,myTimeout,parameter); //does NOT work for IE

Вместо этого используйте анонимную функцию в качестве аргумента, которая должна вызывать намеченную функцию с правильным аргументом:

setTimeout(function(){myFunction(myParameter);},myTimeout);

Итак, ваш начальный вызовна setTimeout должно быть изменено на:

setTimeout(function(){get_info(0);}, 1000); 

и последующие вызовы на success должны быть:

setTimeout(function(){get_info(lines);}, 1000); 

Если это происходит из-за того, что IE кэширует ваши GET-запросы, вы можете просто установить cache в false для jQuery.ajax() и позволить jQuery обработать его для вас (не забудьте очистить кеш после внесения этого изменения):

//do this for *all* ajax requests
$.ajaxSetup ({
    cache: false
});

или

//do it for this ajax request
$.ajax ({
    cache: false,
    //..other options here
});
1 голос
/ 28 апреля 2011

Добавьте временную метку в ваши данные, чтобы избавиться от кеша IE.

    var timestamp = new Date();
    $.ajax({
        url: "/toto",
        data: { ....., timestamp: timestamp.getTime() },
        ...
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...