2013-07-08 48 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解釋。

相關問題