长轮询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一起使用的setTimeout
forms:
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()
设置cache
为false
,让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() }, ... });