Internet Explorer 9 和 JavaScript 变量范围问题

internet explorer 9 & javascript variable scoping issue

本文关键字:变量 范围 问题 JavaScript Explorer Internet      更新时间:2023-09-26

此代码适用于Chrome和Firefox,但不适用于IE9...需要一些提示...

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

更新:

感谢您的帮助...

这是IE9的问题,IE 抛出了错误代码"C00ce56e" - 这是字符集的问题。我将尝试 PHP 脚本中的另一个标头...

谢谢 @ 全部

你的代码对我来说看起来不错,除了在 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(),然后才能向请求添加回调。