通过ajax发送多个对象(使用angular)

时间:2015-12-10 19:32:03

标签: javascript c# jquery angularjs ajax

我在对象'data'中有一个用户输入列表。 (例如data.username,data.password,data.age)

我正在使用angular将数据对象传递给后端。

var data = {};
data[0] = data1;
data[1] = data2;

我正在传递另外两个对象。选择和网格。如何在一次ajax调用中将所有这三个一起传递?或者我必须独立转移它。如果我单独转移这些细节会影响性能吗?

我可以做这样的事情,在一次ajax调用中将对象发送到一起吗?

data -->>         ["Raul","New York","31"]
selections-->>    ["dy.txt","my.txt","yy.txt"]
grid-->           ["sesion","id"]

如何使用c#在服务器端单独检索它,如果它们一起传递的话。

这是我需要传递的3个对象

for key, val in string.gmatch(data, "(%W*)=(%W*),") do
   print(key.." equals "..val)
end

3 个答案:

答案 0 :(得分:3)

假设您的服务器端有一个这样的视图模型

public class CreateUserViewModel
{
  public string UserName{set;get;}
  public string Location {set;get;}
  public int Age {set;get;}
}
public class RegisterViewModel
{
  public CreateUserViewModel User {set;get;}
  public List<string> Selections {set;get;}
  public List<string> Grid {set;get;}
}

和像这样的MVC动作方法

public ActionResult Create(RegisterViewModel model)
{
  // read model and save and return some JSON response
}

您可以简单地构建与视图模型的结构匹配的javascript对象,并使用angualr的$http服务发布它。无需担心设置内容类型或Json字符串。 Angualr会照顾它。

var model={ User : {} ,Selections :[], Grid=[] };
model.User.Age =23;
model.User.UserName ="test";
model.User.Location="New York";

model.Selections.push("dy.txt");
model.Selections.push("some.txt");

model.Grid.push("session");
model.Grid.push("id");

var url="replcaeUrltoYourActionMethodHere";

$http.post(url, model)
.then(function(response)
{
  // do something with the response
  // var result= response.data
});

答案 1 :(得分:1)

您可以使用以下命令在ajax中发送多个对象/变量:

var submits = "=" + JSON.stringify(data);
$.ajax({
        type: "POST",
        url: serviceURL,
        data: {submits : submits, data1:data1, data2:data2}
});

在C#中,您可以像处理提交一样访问data1和2。 根据data1和data2中的内容,您可能需要先将其字符串化。

第二个选项
如果你愿意,你也可以(但它更难看)一次性使用stringify并只传递字符串:

data = {};
data["data1"] = data1;
data["data2"] = data2;
var submits = "=" + JSON.stringify(data);

答案 2 :(得分:1)

您是否在服务器上使用WebApi或MVC?如果是这样,最简单的方法是创建一个类,该类包含您需要发送的3个实体并利用内置的model-binding

因此,在您的示例中,您列出了看起来像用户表单,选择和网格的内容。我不确定最后两个是什么,但示例Model可能看起来像这样:

public class UserSubmissionViewModel
{
    public UserSubmissionViewModel() { }

    public UserFormModel User {get;set;}

    public SelectionsModel Selections { get; set; }

    public GridModel Grids { get; set; }
}

然后在您的网络api控制器或您的MVC控制器上,你有一个这样的方法:

public async Task<IHttpActionResult> Submit(UserSubmissionViewModel model)

你的javascript会像这样大致相似:

var toSend = {"UserFormModel":data, "SelectionsModel":selections, "GridModel":grids};
$.ajax({
         type:"POST",
         data:toSend, //<--- you might need to JSON.stringify this, cant test this code at the moment
         url:serviceURL //<-- Calls your Submit method on the controller
    });