Javascript Ajax发送后嵌套数组,未定义
我正在使用Javascript Ajax发送后嵌套数组,未定义,javascript,ajax,.net-core,asp.net-core-mvc,Javascript,Ajax,.net Core,Asp.net Core Mvc,我正在使用var form=$(“#AAAForm”).serializeArray()来序列化AAAForm中的所有值。然后,我使用以下代码将所有值从购物车推送到表单: var CartPush = [{name: "OrderDetails", value: Cart}] form.push(CartPush); 然后,我使用以下Ajax函数向服务器发送post请求 $.ajax({ type: "POST", url: "/Update/I
var form=$(“#AAAForm”).serializeArray()
来序列化AAAForm中的所有值。然后,我使用以下代码将所有值从购物车推送到表单:
var CartPush = [{name: "OrderDetails", value: Cart}]
form.push(CartPush);
然后,我使用以下Ajax函数向服务器发送post请求
$.ajax({
type: "POST",
url: "/Update/Inventory",
data: form,
success: function (data) {
alert(data); // show response
}
});
我希望它发送以下内容:(这是console.log(form)
的输出)
但是,以下内容实际上已发送到服务器:
FirstName: a
LastName: a
PostalCode: a
HouseNumber: a
Street: a
City: a
State: a
Country: a
Email: a
undefined:
为什么我要添加的数组是未定义的?还有,我该如何解决它?我使用示例数据创建了以下JSFIDLE。
我不认为这是个问题,但从整体来看。我正在将数据发布到dotnet core中的以下函数中,我收到的表单数据很好,但是,我收到的OrderDetails数据只是空的,我认为这是因为发布的数据未定义
[HttpPost]
public async Task<IActionResult> AccountAndAddress(OrderViewModel values, List<ProductsShopCartViewModel> OrderDetails)
{
return Ok();
}
[HttpPost]
公共异步任务帐户和地址(OrderViewModel值、列表OrderDetails)
{
返回Ok();
}
对于要工作的模型绑定,您发送的数据的结构应该与您的操作方法参数相匹配
您尚未共享服务器端视图模型类的外观。无论如何,要处理这样的情况,我将创建一个单一视图模型,其中包含两个类作为属性
public class AccountAndAddressVm
{
public List<AddressVm> Address { set; get; }
public List<ProductsShopCartViewModel> OrderDetails { set; get; }
}
public class AddressVm
{
public string Name { set; get; }
public string Value { set; get; }
}
public class ProductsShopCartViewModel
{
public int ProductId { set; get; }
public string Name { set; get; }
public int Quantity { set; get; }
}
现在我们要做的就是发送一个具有相同结构的JS对象
var form = [{ name: "FirstName", value: "Shyju" },
{ name: "PostalCode", value: "98052" },
{ name: "City", value: "Redmond" }];
var cart = [{ "ProductId": "760", "Name": "Test ",Amount": 1 },
{ "ProductId": "360", "Name": "Xox ",Amount": 4 }
];
var d = { Address: form, OrderDetails: cart };
// the "d" object has similar structure like our AccountAndAddressVm class
$.ajax({
type: "POST",
url: "/Home/AccountAndAddress",
data: JSON.stringify(d),
contentType:"application/json",
success: function (data) {
console.log('response',data);
}
});
JSON.stringify
方法将转换JavaScript对象并创建该对象的字符串表示。contentType:“application/json”
属性将告诉jQuery将application/json
作为Content-Type
请求头发送。data:json.stringify(form),
这正是我想要完成的,谢谢!
[HttpPost]
public ActionResult AccountAndAddress([FromBody] AccountAndAddressVm OrderDetails)
{
// Here I am simply returning what we received fore debugging.
return Ok(OrderDetails );
}
var form = [{ name: "FirstName", value: "Shyju" },
{ name: "PostalCode", value: "98052" },
{ name: "City", value: "Redmond" }];
var cart = [{ "ProductId": "760", "Name": "Test ",Amount": 1 },
{ "ProductId": "360", "Name": "Xox ",Amount": 4 }
];
var d = { Address: form, OrderDetails: cart };
// the "d" object has similar structure like our AccountAndAddressVm class
$.ajax({
type: "POST",
url: "/Home/AccountAndAddress",
data: JSON.stringify(d),
contentType:"application/json",
success: function (data) {
console.log('response',data);
}
});