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 所以,如果今天有任何经验,请分享:)
答案 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
。