Internet Explorer 9 & Javascript переменная область видимости проблема

Этот код работает в Chrome и Firefox, но не в IE9 ... нужно несколько советов...

var obj = {
    data: [],

    json: function() {
        var self = this;
        $.getJSON("highscore.json", function(resp) {
            self.data = resp.splice(0);
        });
    }
};

Обновить:

спасибо за вашу помощь...

это была проблема с ie9, т.е. сгенерировал код ошибки "c00ce56e" - это проблема с кодировкой. Я попробую другой заголовок в сценариях PHP...

спасибо @ все

1 ответ

Ваш код выглядит хорошо для меня, за исключением того, что эти данные не будут заполняться до тех пор, пока не будет выполнен запрос json, что НЕ мгновенно, потому что ajax асинхронный.

obj.json();
alert(obj.data); // []
setTimeout(function(){
    alert(obj.data); // ["foo","bar","foobar"]
},5000);

Обновить
Я предлагаю добавить свойство к вашему объекту под названием request и сохранить в нем запрос $.getJSON. На этом этапе нет смысла хранить данные непосредственно на объекте, потому что вы всегда можете получить их из запроса.

var obj = {
    request: {done:$.noop,fail:$.noop,always:$.noop},

    json: function() {
        this.request = $.getJSON("highscore.json");
    }
};
obj.json();
// you can run the following as many times as you need to use the data.
obj.request.done(function(data){
    alert(data.splice(0));
});

просто отметьте, что в текущей форме вы должны вызвать.json(), прежде чем сможете добавить обратные вызовы к запросу.

Другие вопросы по тегам