长轮询jQuery在IE中不起作用

$ .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("

"+msg.messages[i]+"

"); } document.getElementById('chatty').scrollTop = document.getElementById('chatty').scrollHeight; } }, complete: function() { setTimeout(get_info, 1000, lines); } }) }; setTimeout(get_info, 1000, 0);

我现在看到你正在使用一种不能与IE 1,2一起使用的setTimeoutforms:

 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请求,你可以简单地为jQuery.ajax()设置cachefalse ,让jQuery为你处理它(记得在进行这个更改后清除你的缓存):

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

要么

 //do it for this ajax request $.ajax ({ cache: false, //..other options here }); 

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

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