ie9 jquery ajax第一次打电话第二次做得不好

时间:2011-10-21 08:13:12

标签: jquery

IE9和jquery AJAX问题.... “如果我点击按钮,它第一次运行良好,但第二次没有...我假设缓存” 我有jquery https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js 简单的ajax调用:

$('#isvalidcompany').click(function(event) {
    var image = $('#isvalidcompany_img');
    var old_state = image.attr('src');
    image.attr('src', '/images/loading.gif');
    $.getJSON('/ajax/change',
        function(data) {
            if (data['error'] != '') {
                image.attr('src', old_state);
                $('#isvalidcompany_error').html(data['error']);
            } else {
                if (data['isvalidcompany'] == 1) {
                    image.attr('src', '/icons/tick_16.png');
                } else {
                    image.attr('src', '/icons/delete_16.png');
                }
            }
        });
    return false;
});

在所有浏览器上它运行良好,除了ie9和ie8和ie7 所以,如果今天有任何经验,请分享:)

5 个答案:

答案 0 :(得分:11)

使用.ajax()方法的cache参数:

$.ajax({
  url: "/ajax/change",
  success: function(data){
    // your callback
  },
  dataType: JSON,
  cache: false
});

[编辑]安东尼的解决方案将阻止每个请求缓存,而我的解决方案将阻止缓存当前请求...查看更符合您需求的内容

答案 1 :(得分:6)

是的,Internet Explorer将对AJAX调用的响应缓存到同一URL。您可以使用以下代码来解决此问题:

$.ajaxSetup({
    cache: false
});

这会将所有jQuery AJAX调用的cache属性设置为false,这将导致自动包含timestamp参数。

答案 2 :(得分:2)

我经历过一次这样的错误,我是一个缓存问题,所以解决它,每次我发送一个新的ajax请求时,我都会用新的随机数附加url。

希望这会对你有所帮助。

答案 3 :(得分:1)

发生的事情是您可能会为您的AJAX呼叫向Web服务发出GET请求。其智慧的Internet Explorer会自动缓存来自GET请求的响应,而其他浏览器会让您决定是否要缓存结果。一旦IE成功发出GET请求,它将不再进行AJAX调用,直到缓存在该对象上到期为止。 check this for more details

//所有jQuery AJAX请求的可用缓存

$ .ajaxSetup({cache:false});

答案 4 :(得分:0)

最有可能是缓存。 IE实际上是正确的:)

您可以使用cache: false参数,也可以使用POST而不是GET