IE9和jquery AJAX问题...."如果我第一次点击按钮,它就会运行良好,但第二次就不行了……我猜是cache。"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,它在所有浏览器上都运行良好所以如果有人有这方面的经验,请分享:)
使用.ajax()
方法的cache
参数:
$.ajax({
url: "/ajax/change",
success: function(data){
// your callback
},
dataType: JSON,
cache: false
});
[EDIT] Anthony的解决方案将防止缓存每个请求,而我的解决方案将防止缓存当前请求…看看什么更适合你的需求
是的,Internet Explorer将AJAX调用的响应缓存到相同的URL。您可以使用下面的代码来解决这个问题:
$.ajaxSetup({
cache: false
});
将所有jQuery AJAX调用的缓存属性设置为false,这将导致自动包含时间戳参数。
我经历过这样的错误一次,我是一个缓存问题,所以解决它,每次我发送一个新的ajax请求,我附加了一个新的随机数的url。
发生的情况是,您可能为AJAX调用向web服务发出GET请求。Internet Explorer将自动缓存来自GET请求的响应,而其他浏览器将让您决定是否要缓存结果。一旦IE成功发出GET请求,它甚至不会再发出AJAX调用,直到该对象的缓存过期。查看更多详细信息
//禁用所有jQuery AJAX请求的缓存
$。
很可能是缓存。IE实际上是正确的:)
您可以使用cache: false
参数,也可以使用POST
而不是GET
。