我是一个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'的键中。
答案 0 :(得分:2)
试试这个:
window[dataSource]
这将获得您拥有的字符串中变量的值。例如:
dataSource = "something"
something = 5
alert(window[dataSource]) // alerts 5
答案 1 :(得分:1)
答案 2 :(得分:1)
var someObj = {};
var keyName = "test";
someObj[keyName]
用于引用对象内部键的方括号。
答案 3 :(得分:0)
而不是
dataCon.name = source;
DO
dataCon[name] = source;
Javascript对象的成员按其键存储。所以这些都是一样的:
dataCon.name
dataCon["name"]
很酷的是你可以用变量代替键:
dataCon.name = "hi!";
var key = "name";
dataCon[key] = "hi again!";
在Mozilla website上非常好地解释了这一点。