$ .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);
答案 0 :(得分:4)
我现在看到你使用的形式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 :(得分:1)
在数据中添加时间戳以摆脱IE缓存。
var timestamp = new Date();
$.ajax({
url: "/toto",
data: { ....., timestamp: timestamp.getTime() },
...
});