2012-04-25 88 views
1

此代码在Chrome &火狐但不是在IE9 ...需要一些提示...的Internet Explorer 9和Javascript的变量范围问题

var obj = { 
    data: [], 

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

更新:

THX您的帮助..

这是一个来自ie9的问题, 即已抛出错误代码“c00ce56e” - 这是字符集问题。 我会尝试另一个头在PHP脚本...

THX @所有

+6

“不工作”究竟意味着什么? – Sirko 2012-04-25 18:03:01

+0

@Sirko。电脑发出声音。 – gdoron 2012-04-25 18:05:32

+0

应该看到计算机并且没有听到。任何制作声音的网站肯定是坏的。 – 2012-04-25 18:07:15

回答

4

您的代码看起来好像没什么问题,比其他的数据将不被填充,直到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(),然后才能添加回调的要求。

+0

+1。猜测下一行是'$(something).text(obj.data [0])' – 2012-04-25 18:05:21