长轮询jQuery在IE中不起作用

时间:2011-04-28 16:06:27

标签: javascript jquery ajax

$ .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 个答案:

答案 0 :(得分:4)

我现在看到你使用的形式setTimeout不适用于IE 12

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 :(得分:1)

在数据中添加时间戳以摆脱IE缓存。

    var timestamp = new Date();
    $.ajax({
        url: "/toto",
        data: { ....., timestamp: timestamp.getTime() },
        ...
    });