动态Json Keys IE11支持

时间:2018-05-02 22:08:04

标签: javascript

如果我使用错误的单词,请提前道歉,但我遇到的问题与IE11有关,无法解析动态JSON密钥。它需要动态的原因是因为ID改变了环境环境。例如,我在config.js文件(缩写)中有以下内容

categories: {
        clientCommon: {
            get FirstName() {
                var field = window.iqbg.common.staticStrings.fieldNotSetString;
                switch (window.iqbg.config.getCurrentEnvironment()) {
                    case 'debug':
                        field = "65638_27";
                        break;
                    case 'dev':
                        field = "341840_3";
                        break;
                }
                return field;
            },
            get LastName() {
                var field = window.iqbg.common.staticStrings.fieldNotSetString;
                switch (window.iqbg.config.getCurrentEnvironment()) {
                    case 'debug':
                        field = "65638_26";
                        break;
                    case 'dev':
                        field = "341840_2";
                        break;
                }
                return field;
            },
        }
    }

然后,在我的主要功能中,我利用以下代码行:

  copyHHSFolders: function (firstName, lastName, clientType, dateOfBirth, callback) {
 var attributes = { [config.categories.clientCommon.FirstName]: firstName,
    [config.categories.clientCommon.LastName]: lastName, 
    [config.categories.clientCommon.DateOfBirth]: dateOfBirth };
    //turns into/IE version
    var attributes = { "341840_3": "Nick",
        "341840_2": "P",
        "341840_5": "1970-01-01" };

然后将其传递给ajax调用并执行它。在Chrome和Firefox中运行良好,但客户端是oldschool政府,只支持IE11(不是Edge,但也在那里工作)

然而,IE11在加载上述脚本时喜欢抛出javascript错误。我现在通过将实际项目置于括号内来进行手动修复,但我不希望每次修改代码并在环境之间移动时都要进行查找/替换。

有没有更好的方法来实现我的目标?注意:让我们保持简单,并说我只是使用滥用Visual Studio作为简单的文本编辑器来修改当前时间的html / js,没有像react / node / angular等那样只有jquery / bootstrap / lodash和其他一些小的帮助库。

我目前没有进行任何类型的蚁群编译来查找/替换变量(在之前的项目中做过),但也不确定这是否是解决方案,或者是否需要利用.ts而不是JS。再一次,对我对这些技术的无知感到抱歉,很难掌握这些技术。

1 个答案:

答案 0 :(得分:0)

对于正在寻找答案的其他人来说,azium的评论引导我进行以下(下面)基本上,创建对象内联的简写不起作用。我确实采取了以下方法。

//below line not IE compatible
//var attributes = { [config.categories.clientCommon.FirstName]: firstName, [config.categories.clientCommon.LastName]: lastName, [config.categories.clientCommon.DateOfBirth]: dateOfBirth };
//however, this is
var attributes = {};
attributes[config.categories.clientCommon.FirstName] =  firstName;
attributes[config.categories.clientCommon.LastName] = lastName;
attributes[config.categories.clientCommon.DateOfBirth] = dateOfBirth;