3

我是 JS 菜鸟,如果我错过了明显的内容,但我所做的搜索未能检索到任何对我有意义的内容,我深表歉意。

我一直在尝试使用传递给进行ajax调用的函数的参数作为数据应该去向的变量的名称。例如:

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

这个想法是,然后可以使用“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”的键中。

4

4 回答 4

2

尝试这个:

window[dataSource]

这将获得您拥有的字符串中变量的值。例如:

dataSource = "something"
something = 5
alert(window[dataSource]) // alerts 5
于 2013-07-08T13:57:47.913 回答
1

使用方括号表示法:

dataCon[name]

或者

dataCon[source]

有关访问对象属性,请参阅MDN 文档

于 2013-07-08T13:57:33.247 回答
1
var someObj = {};
var keyName = "test";
someObj[keyName]

方括号引用对象内的键。

于 2013-07-08T13:57:52.103 回答
0

代替

dataCon.name = source;

dataCon[name] = source;

Javascript 对象的成员由它们的键存储。所以这些是相同的:

dataCon.name
dataCon["name"]

很酷的是您可以用变量替换键:

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

这在Mozilla 网站上得到了很好的解释。

于 2013-07-08T14:02:41.690 回答