我在IE8中有奇怪的行为,无法解释执行以下JavaScript函数的情况:
function getStatus() {
var action = "/Device/Status";
$.getJSON(action, function (data) {
$.each(data, function (i, e) {
$('#btnEmergency' + e.BoreId).val(e.InEmergency ? "On" : "Off");
});
});
}
加载Fiddler后,我确认返回了以下JSON结果(注意InEmergency对于所有钻孔均为false):
[{"BoreId":1,"InEmergency":false},{"BoreId":2,"InEmergency":false},{"BoreId":3,"InEmergency":false},{"BoreId":4,"InEmergency":false},{"BoreId":5,"InEmergency":false},{"BoreId":6,"InEmergency":false}]
奇怪的是,第1孔的e.InEmergency结果为true(仅在IE8中(我尚未测试过其他版本的IE,我指的是它在Chrome,Firefox和Safari中正常工作的事实)),导致按钮值为设置为“开”。我是否缺少一些显而易见的东西?
最佳答案
与其他浏览器相比,Internet Explorer具有不同的缓存行为(不可避免)。特别是,它倾向于在没有用时缓存XMLHTTPRequest请求。
解决此问题的方法是添加一个无用的参数,该参数随每个请求而变化,以使其唯一,从而确保没有缓存的值。使用毫秒为单位的时间是一种非常简单的方法:
function getStatus() {
var action = "/Device/Status";
$.getJSON(action + '?_=' + (new Date()).getTime(), function (data) {
$.each(data, function (i, e) {
$('#btnEmergency' + e.BoreId).val(e.InEmergency ? "On" : "Off");
});
});
}
请注意,(a)这是jQuery在
cache: false
调用中执行$.ajax
的方式,(b)如果您的URL中已经有参数,则需要使用&_=
代替。