我有一个通用调度程序,它接受参数然后生成$ .ajax() 如您所见,我循环遍历参数以构建数据。
function dispatch(controller, action, param1, param2,...) {
var args = '', pg = 1, id = '';
var l = arguments.length;
var data = {};
for (var i = 2; i < arguments.length; i += 2) {
data[arguments[i]] = arguments[i + 1];
}
$.ajax({
type: "POST",
url: "/" + (controller + "/" + action,
data: data,
dataType: "json",
success: function (res) {
alert('success');
},
error: function (xhr, status, error) {
alert('error!');
}
});
}
这就是我打电话的方式:
dispatch("XYZ", "AddGuests", "id", 10, "name", "Bob");
一切都按预期工作,我将所有参数都返回到我的MVC 3控制器中。 现在我需要将multidimentional关联数组作为参数传递给我的控制器。 我想使用我用于其他调用的单个通用调度程序。 但不知何故,我为关联数组参数获取null。
基本上我想将一个来宾数组发布到我的控制器的List参数。
准备关联数组数据的代码:
var guest = {};
var guests = [];
for(var i=0;i<2;i++){
var name = GetName();
var email = GetEmail();
guest = { 'Email': email, 'Name': name };
guests.push(guest);
}
循环结束会给我,说:
{
{'Email':"bob@zyz.com", 'Name':"Bob"},
{'Email':"tom@zyz.com", 'Name':"Tom"}
}
这是对调度员的新调用:
dispatch("XYZ", "AddGuests", "id", 10, "guests", JSON.stringify(guests));
这是我的控制者:
[HttpPost]
public ActionResult AddGuests(string id, List<SelectedGuest> guests){
//save guests
}
[Serializable]
public class SelectedGuest
{
public string Email { get; set; }
public string Name { get; set; }
}
当我看到httpfox时,我看到发布了正确的值:
id 10
guests [{"Email":"bob@zyz.com","Name":"Bob"},{"Email":"tom@zyz.com","Name":"Tom"}]
如果我这样做,我会将访客正确传递给我的控制器: 但这限制了我只传递来宾数组而不是其他参数。
data = JSON.stringify(guests);
我做错了什么?谢谢你的阅读。
答案 0 :(得分:0)
如果使用JSON.stringify(guests)有效,为什么不将它与其他不需要字符串化的参数合并到另一个JSON对象中呢?
data = { "id": 10, "Guests": JSON.stringify(guests) };
或者,您可以构建一个javascript对象,将其组合在一起并调用stringify。