2016-04-28 17 views
1

我傳遞大量的變量,以一個HTTP服務器。我不想編寫長的命令提示符,而是想將變量設置爲對象字面值。如果我靜態設置它可以正常工作。但我想在循環中填充對象。 這工作:建立一個對象文本陣列將值傳遞到服務器

var data= { T1: 123, 
       R1: 'L', 
       T2: 3434, 
       R2: 'R'}; 

$.post(url,data, get_outcome); 

但是我想寫一個循環,這樣做,我需要明白,我怎麼會填充的對象常量我的變量名和值。 (該例子只是爲了演示)如果我嘗試這種方式失敗:

var data=[]; 
data.push({T1: 123}); 
data.push({T2: 3434}); 
data.push({R1: 'L'}); 
data.push({R2: 'R'}); 

$.post(url,data, get_outcome); 

我甚至試過這樣:

var data=[]; 

var a,val,name; 
    name={"T1","T2","R1","R2"}; 
    val={"123","3434","L","R"}; 
for(a=0;a<4;a++){ 
    data.push({name[a]:val[a]}); 
} 
$.post(url,data,get_outcome); 

最終的功能應該像這樣工作:

function Save(var values, var val){ 
var a,name; 
var data=[]; 
    for(a=0;a<values;a++){ 
     name="T"+(a+1); 
     data.push({name: val[a]}); 
     } 
    $.post(url,data,get_outcome); 
    } 

我在做什麼錯?

我實現由拉吉夫建議的解決方案如下:

function save(){ 
    var data=[]; 

    function dataPush(name, val) { 
     var obj = {}; 
     obj[name] = val; 
     data.push(obj); 
    } 
      //eg hardcoded values 
     dataPush('T1',123); 
     dataPush('T2',3123); 
     dataPush('R1',"R"); 
     dataPush('R2',"L"); 
      // values stored in arrays elsewhere 
    for(a=2;a<max;a++){ 
     temp="T"+(a+1); 
     dataPush(temp,T[a]); 
     temp="R"+(a+1); 
     dataPush(temp,R[a]); 
    } 


    $.post(url,data, get_outcome); 
    } 

回答

1
 var arry = []; 
     function dataPush(name, val) { 
      var obj = {}; 
      obj[name] = val; 
      arry.push(obj); 
     } 

     KeyName =["T1","T2","R1","R2"]; 
     KeyVal = ["123", "3434", "L", "R"]; 
     for (var i = 0; i < KeyName.length; i++) { 
       dataPush(KeyName[i], KeyVal[i]); 
     } 
     console.log(arry); 

之後使用該陣列

+0

我用Java編程論壇和等待幾天才能得到任何響應。我必須說,你們JavaScript是超級有益的。非常感謝。 – Jan

+0

好吧歡迎這麼多,我的工作 – Rajiv

3

你正在創建的陣列。創建這樣

var data={}; 
data.T1 = 123; 
data.T2 = 3434; 
data.R1 = 'L'; 
data.R2 = 'R'; 
$.post(url,data,get_outcome); 

而且當使用陣列

var data={}; 
var a,val,name; 
name={"T1","T2","R1","R2"}; 
val={"123","3434","L","R"}; 
for(a=0;a<4;a++){ 
    data[name[a]] = val[a]; 
} 
+0

請告訴我如何使用按鍵條目添加到數據。 – Jan

+0

@Jan,'推()'用於與陣列創建一個簡單的對象字面你不需要推 – Satpal

+0

我想知道如何雖然使用它 - 因爲我的例子顯示了這是我想要做的方式它。 – Jan

2
var data = {}; 

var name = ["T1", "T2", "R1", "R2"]; 
var val = [123, 3434, "L", "R"]; 

name.forEach(function(el, index){ 
    data[el] = val[i]; 
}); 

會產生

var data= { T1: 123, 
       R1: 'L', 
       T2: 3434, 
       R2: 'R' 
      }; 
+0

解決方案假定變量名稱可用。我將編輯原始問題。 – Jan

+0

告訴我你是如何得到T1,R1的? – void

+0

T1只是服務器需要的變量的名稱。示例函數(底部)顯示了我的設置嘗試。 – Jan

1

所有我從你的問題理解的是,你需要創建一個對象,併發送那到服務器。該對象需要具有一些要動態添加的屬性,而不是靜態添加。

如果是這樣的話,你可以這樣做的:

var localData = [{key1: 'val1'},{key2: 'val2'},{key3: 'val3'}, {key4: 'val4', key5:'val5'}] // your data that you want to send 

function createPayload(localData) { 
var payload = {}; 
localData.forEach(function(o) { 
    for(var key in o) { 
    payload[key] = o[key]; 
    } 
}); 
return payload; 
} 

var objectToSend = createPayload(localData); 
console.log(objectToSend);