通过变量

时间:2018-01-18 11:30:36

标签: javascript jquery json ajax

我试图通过变量访问对象。我在lang中保存了一个看起来像这样的对象:

{TeamspeakControl: "Teamspeak Control"}

现在我想把字符串放在一个变量上:

console.log(lang["TeamspeakControl"]);

如果我现在运行此操作,我会在控制台中收到错误:

  

未捕获的TypeError:无法读取未定义的属性'TeamspeakControl'

有人有想法吗?

var lang = {TeamspeakControl: "Teamspeak Control"};
$('lang').each(function() {
  console.log(lang[$(this).attr('label')]);
  $(this).html(lang[$(this).attr('label')]);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://rawgit.com/utatti/perfect-scrollbar/master/css/perfect-scrollbar.css" rel="stylesheet"/>
<script src="https://rawgit.com/utatti/perfect-scrollbar/master/dist/perfect-scrollbar.js"></script>
<lang label="TeamspeakControl"></lang>

它有效。看起来我的获取是异步的并且要慢。这就是我的lang对象将被填充的方式。

    var lang = Object();
    $.get('lang', function(data) {
        lang = data;
    });

2 个答案:

答案 0 :(得分:0)

看起来它有效,如果我让它像这样异步:

    $.get('lang', function(data) {
        var lang = data;
        $('lang').each(function() {
            $(this).html(lang[$(this).attr('label')]);
        });
    });

但这是一个很好的解决方案吗?

答案 1 :(得分:-1)

奇怪......这对我有用:

var lang = {TeamspeakControl: "Teamspeak Control"};
console.log(lang["TeamspeakControl"]);

一般来说,你做得对,你只需要注意你将对象分配给运行console.log的同一范围内的变量。

在你的情况下你可以console.log只在回调内部,即使它很慢:

var lang = Object();
$.get('lang', function(data) {
    lang = data;
    console.log(lang);
});