簡體   English   中英

使用jQuery在Ajax調用中僅發送數組中對象的少數屬性

[英]Send only few properties of objects within an Array in ajax call with jQuery

// 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

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

注意:我使用的數組不是NewPerson的單個對象。 上面的代碼僅作為示例。

不幸的是,您無法告訴JSON.stringify您要解析的對象/數組的哪些屬性,而哪些不是。 如果確實需要“手動”創建NewPerson對象,則必須過濾要發送給自己的值。

更好的方法似乎是方法.serialize().serializeArray() 兩者都將從form元素中讀取input元素,但僅讀取那些擁有name=屬性的元素。 因此,您可以給#FirstName和#LastName一個name屬性。

參考: .serializeArray() ,.serialize()

您可以輕松編寫一個函數來實現以下目的:

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(),
    ...
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM