2013-07-08 47 views
3

我是一个JS noob,如果我错过了显而易见的道歉,但是我没有找到任何对我有意义的搜索。使用传递给一个函数的参数作为变量名称

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

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

的想法是,检索JSON对象然后使用“mainData”变量访问,但是我不能,因为我有其他文件中检索应该下进行访问使用此明确变量名称'expData'。这两个都是全局变量,并且在页面加载时已经声明。

下面是当前代码的工作,但我想抽象掉了“如果,否则,如果,否则”在Ajax调用的成功部分块:

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'的键上。

回答

2

试试这个:

window[dataSource] 

这将得到VA值可以在你的字符串中进行翻转。例如:

dataSource = "something" 
something = 5 
alert(window[dataSource]) // alerts 5 
+0

谢谢,工作出色。 – joesch

+0

@joesch不客气':)' – Doorknob

1
var someObj = {}; 
var keyName = "test"; 
someObj[keyName] 

方括号表示一个对象内的键。

0

而不是

dataCon.name = source; 

dataCon[name] = source; 

JavaScript对象的成员由他们的密钥存储。因此,这些都是一样的:

dataCon.name 
dataCon["name"] 

很酷的事情是,你可以通过一个变量替换键:

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

这个非常漂亮的Mozilla website解释。

相关问题