Internet Explorer 9中和Javascript的变量范围问题(internet ex

2019-09-28 04:57发布

此代码在Chrome和Firefox,但不是在IE9 ...需要一些提示...

var obj = {
    data: [],

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

更新:

THX您的帮助...

它是从IE9的一个问题,即已经抛出了错误代码“c00ce56e” - 这是用字符集的问题。 我会尝试在PHP脚本的另一头...

THX @所有

Answer 1:

您的代码看起来好像没什么问题,比其他的数据将不被填充,直到JSON请求完成,这是不即时,因为AJAX是异步的。

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

更新
我建议增加一个属性到您的对象调用请求,并存储在它的$ .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(),然后才能添加回调的要求。



文章来源: internet explorer 9 & javascript variable scoping issue