2010-07-13 34 views
0
// Initialize the object, before adding data to it. 
var NewPerson = new Object(); 

NewPerson.FirstName = $("#FirstName").val(); 
NewPerson.LastName = $("#LastName").val(); 
NewPerson.Address = $("#Address").val(); 
NewPerson.City = $("#City").val(); 
NewPerson.State = $("#State").val(); 
NewPerson.Zip = $("#Zip").val();  

实际上,我正在填充并发送一个NewPerson对象数组。我使用所有的属性在我的JavaScript,但是当我做Ajax调用像下面,我想只发送两个属性地说FirstNameLastName在jQuery调用jQuery时只发送数组中对象的几个属性

$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    url: "PersonService.asmx/AddPerson", 
    data: "{'NewPerson':" + JSON.stringify(NewPerson) + "}", 
    dataType: "json" 
}); 

注:我使用数组不是NewPerson的单个对象。上面的代码就是例子。

回答

1

您可以轻松地编写一个函数来实现这一目标:

function extractMembers(arr, members) 
{ 
    var m, o, i, j; 
    var output = []; 
    for (i = 0; i < arr.length; ++i) { 
     o = {}; 
     for (j = 0; j < members.length; ++j) { 
      m = members[j]; 
      o[m] = arr[i][m]; 
     } 
     output.push(o); 
    } 
    return output; 
} 

现在你可以使用这样的功能:

var objects = [{FirstName: "...", LastName: "...", Address: "..."}, 
       {FirstName: "...", LastName: "...", Address: "..."}] 

var toSend = extractMembers(objects, ["FirstName", "LastName"]); 

一两件事:您可能希望使用短符号在JavaScript中创建对象:

var NewPerson = { 
    FirstName: $("#FirstName").val(), 
    LastName: $("#LastName").val(), 
    ... 
}; 
+0

@Ferdinand,最后一个例子不起作用。你需要使用字符串作为键。 – 2010-07-13 06:24:40

+0

@Jacob Relkin:这不是真的....你把这个与有效的JSON混淆在一起,其中的键确实必须是双引号字符串。 – 2010-07-13 06:26:23

+0

+1喜欢你的答案。非常感谢你。 :) – IsmailS 2010-07-13 06:27:39

1

不幸的是,你不能告诉JSON.stringify你想解析哪些对象/数组的属性,哪些不属性。如果您确实需要手动创建NewPerson对象,则必须过滤要发送给您的值。

更好的方法似乎是方法.serialize().serializeArray()。两者都会读取form元素中的 input元素,但只包含那些拥有name=属性的元素。所以你可以给#FirstName和#LastName一个名称属性。

参考:.serializeArray().serialize()

+0

谢谢@jAndy的答案。 NewPerson对象中值的赋值是虚拟的。实际上,我的代码中有很多。感谢你只是没有试图回答这个问题,而是看着解决它的更大问题。再次感谢。 – IsmailS 2010-07-13 06:27:14