由于某种原因,简单的ajax时钟可以在除IE之外的所有内容中工作

时间:2013-05-30 03:17:30

标签: c# jquery asp.net-mvc

这是我简单的ajax函数:

var callback = function () {
    $.ajax({
        url: "/Home/Timer",
        success: function (response) {
            console.log(response); // Fails, but only in IE10
            $("#target").html(response);
        }
    });
}

setInterval(callback, 1000);

和Controller / Action:

public String Timer()
{
    Debug.WriteLine(DateTime.Now.ToString()); // Shows correctly in all browsers
    return DateTime.Now.ToString();
}

在Opera,Chrome,Firefox中运行良好,但出于最奇怪的原因不适用于IE10。在每个其他浏览器中,console记录当前时间,但在IE10中,它会一遍又一遍地记录同一时间。我在我的Timer方法上放了一个断点,它正确地击中了方法,但不知何故,当它回到success回调时,它会报错时间。为什么会这样?

3 个答案:

答案 0 :(得分:3)

缓存可能吗? 尝试在ajax选项中设置cache:false

答案 1 :(得分:1)

在safari和一些较旧的浏览器中,(从我迄今为止所经历过的,cache:false似乎有时不起作用)。对于更多跨浏览器兼容的解决方案,您可以向data调用添加ajax()选项,并添加随机数生成器作为参数。这将是这样的。

var callback = function () {
 $.ajax({
    url: "/Home/Timer",

    //start random number generator
    data : { r: Math.random() }
    //end random number generator

    success: function (response) {
        console.log(response); // Fails, but only in IE10
        $("#target").html(response);
    }
 });
}

这样,每次发生服务器调用时,都会生成一个新的随机数,由于数据与先前的请求不同,ajax请求不会被缓存,并且每次都会确保新的服务器调用

答案 2 :(得分:0)

在package下编辑并在CSS中设置cache:false并在主类

下调用每个中间函数