Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ajax发送后嵌套数组,未定义_Javascript_Ajax_.net Core_Asp.net Core Mvc - Fatal编程技术网

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);
         }
});