设置对象文字数组以将值传递给服务器

时间:2016-04-28 11:43:10

标签: javascript jquery

我将大量变量传递给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);
  }

我做错了什么?

我实施了Rajiv建议的解决方案如下:

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);
   }

4 个答案:

答案 0 :(得分: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];
}

答案 1 :(得分: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'
           };

答案 2 :(得分: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);

答案 3 :(得分: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);

之后使用了这个数组