我在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}]
奇怪的是,e.InEmergency对于1号洞来说是真实的(仅在IE8中(我没有测试过其他版本的IE,我指的是它在Chrome,Firefox和Safari中正常工作)),导致按钮值设置为“开”。我错过了一些显而易见的事情吗?
答案 0 :(得分:1)
您尝试使用浏览器dom方法eval()并查看是否适合您..我不确定这是否是您的问题。 另外我建议首先评估json strring到一个对象,然后循环遍历相同的abd验证它。我的观点是循环在IE中引起了一些问题。
答案 1 :(得分:1)
与其他浏览器相比,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)如果您的网址中已有参数,则需要使用&_=
代替