Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用传递给函数的参数作为变量名_Javascript - Fatal编程技术网

Javascript 使用传递给函数的参数作为变量名

Javascript 使用传递给函数的参数作为变量名,javascript,Javascript,我是一个JS noob,所以如果我错过了显而易见的,但我所做的搜索没有检索到任何对我有意义的东西,我深表歉意 我一直在尝试使用一个传递给函数的参数作为变量的名称,该参数会进行ajax调用,用于表示数据应该放在哪里。例如: ajaxFun("[url loctaion].json?callback=?","main","mainData"); dataSource = "something" something = 5 alert(window[dataSource]) // alerts 5

我是一个JS noob,所以如果我错过了显而易见的,但我所做的搜索没有检索到任何对我有意义的东西,我深表歉意

我一直在尝试使用一个传递给函数的参数作为变量的名称,该参数会进行ajax调用,用于表示数据应该放在哪里。例如:

ajaxFun("[url loctaion].json?callback=?","main","mainData");
dataSource = "something"
something = 5
alert(window[dataSource]) // alerts 5
我们的想法是,然后使用“mainData”变量访问检索到的JSON对象,但是我不能明确地使用它,因为我有另一个要检索的文件,该文件应该可以在变量名“expData”下访问。这两个变量都是全局变量,在页面加载时已经声明

下面是当前确实有效的代码,但我想抽象掉ajax调用成功部分中的“if,else if,else”块:

    function ajaxFun(urlS,jsonpCallbackS,dataSource){
    $.ajax({
            type: "GET",
            url: urlS,
            async: false,
            jsonpCallback: jsonpCallbackS,
            contentType: "application/json",
            dataType: "jsonp",
            cache: false,
            success: function(source){
            if(dataSource === "expData"){
                expData = source;
            }
            else if(dataSource === "mainData"){
                mainData = source;
            }
            else{
                console.log('data not set');
            }
            },
            error: function(classData){
                console.log('error');
            }
    });
}
我尝试了各种方法,包括使用eval()和将结果附加到对象:

var dataCon = {};

function ajaxFun(urlS,jsonpCallbackS,dataSource){
    $.ajax({
            type: "GET",
            url: urlS,
            jsonpCallback: jsonpCallbackS,
            contentType: "application/json",
            dataType: "jsonp",
            cache: false,
            success: function(source){
                var name = dataSource;
                alert(name);
                dataCon.name = source;
                },
                error: function(classData){
                    console.log('error');
                }
    });
}
使用:

'ajaxFun("[url loctaion].json?callback=?","main","mainData");'

我收到警报“mainData”,但在dataCon的console.log中,我可以看到“source”的值已放入名为“name”的键中。

使用方括号表示法:

dataCon[name]

请参见

尝试以下操作:

window[dataSource]
这将获得字符串中变量的值。例如:

ajaxFun("[url loctaion].json?callback=?","main","mainData");
dataSource = "something"
something = 5
alert(window[dataSource]) // alerts 5
方括号用于引用对象内的键。

而不是

dataCon.name = source;

Javascript对象的成员由其键存储。所以这些都是一样的:

dataCon.name
dataCon["name"]
最酷的是,您可以用变量替换键:

dataCon.name = "hi!";
var key = "name";
dataCon[key] = "hi again!";
这很好地解释了这一点

dataCon.name = "hi!";
var key = "name";
dataCon[key] = "hi again!";