Странное поведение, разбирающее JSON в IE8 - PullRequest
3 голосов
/ 06 февраля 2011

У меня странное поведение в 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)), в результате значение кнопки устанавливается на «Вкл.».Я что-то упускаю, что должно быть очевидным?

Ответы [ 2 ]

1 голос
/ 06 февраля 2011

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, вам нужно будет использовать &_= вместо.

1 голос
/ 06 февраля 2011

привет, попробуйте использовать метод eval () browserss dom и посмотрите, сработает ли это для вас ... Я не уверен, что это ваша проблема. В противном случае я бы предложил сначала вычислить строку json для объекта, а затем выполнить цикл по тому же abd и проверить его. Мое мнение таково, что зацикливание вызывает некоторые проблемы в IE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...