带有javascript对象列表的Ajax请求失败

时间:2015-06-29 15:56:14

标签: ajax asp.net-mvc

这个问题被问了很多,但没有一个答案对我有用。我正在尝试将一个对象列表发送到ASP MVC 5中的控制器。我JOSN.stringify在列表中,并尝试将其接收到列表中。

我当然希望这不是一些我错过的愚蠢错字......

我确实发现了一个错字(有趣的是写下来有帮助),但这不是问题。 ajax称为“Sale”,但控制器为“Sales”。我修好了,但仍然是同样的问题。 (最后添加图片)。

修改

我将ajax更改为:

$('#complete-sale').on('click', function ()
{
    alert("in complete sale");
    var itemsInCart = JSON.stringify(shoppingCart.getItemsInCart());
    alert("itemsInCart: " + itemsInCart);
    $.ajax({
        type: "GET",
        url: "/Sales/completeSale", // the method we are calling
        contentType: "application/json; charset=utf-8",
        data: { 'itemsInCart': itemsInCart },
        dataType: "json",
        success: function (result) {
            alert("sale complete succeeded" + result[0]);
            addItemToCart(result[0]);
        },
        error: function (result) {
            alert("failed complete sale request " + result[0]);
        }
    });
});

开发人员工具中显示的请求网址现在是:

http://localhost:52459/Sales/completeSale?itemsInCart=[{"ItemId":1,"Quantity":"1","Price":3.5}]

这似乎应该是正确的。我还将控制器返回到return View("hello"),所以实际上会有一些回复。

型号:

public class ItemInCart
{
    [Key]
    public int ItemId { get; set; }
    public virtual Variety variety { get; set; }

    public int Quantity { get; set; }
    public virtual InventoryItem inventoryItem { get; set; }

    public double Price { get; set; }
    public virtual Variety price { get; set; }

}

控制器(Sales.cs):

    [HttpGet]
    public ActionResult completeSale(List<ItemInCart> itemsInCart)
    {
        return View();
    }

的Ajax:

$('#complete-sale').on('click', function ()
{
    alert("in complete sale");
    itemsInCart = shoppingCart.getItemsInCart();
    stringifiedItemsInCart = JSON.stringify({ 'itemsInCart': itemsInCart});
    alert("stringified: " + stringifiedItemsInCart);
    $.ajax({
        type: "GET",
        url: "/SalescompleteSale", // the method we are calling
        contentType: "application/json; charset=utf-8",
        data: stringifiedItemsInCart,
        dataType: "json",
        success: function (result) {
            alert("sale complete succeeded" + result[0]);
            addItemToCart(result[0]);
        },
        error: function (result) {
            alert("failded complete sale request " + result[0]);
        }
    });
});

alert request failed

ajax post stringified

developer tools 1

developer tools 2

enter image description here

1 个答案:

答案 0 :(得分:0)

前几天我遇到了这个问题,它可能有点令人困惑,特别是在你是方法签名涉及视图模型列表的情况下。

JSON.stringify()似乎总是对POST数据很有用,也许其他人可以解释原因,但对于GET请求,它不是正确的解决方案。

我遇到的问题是请求包含int列表的网址,并且像您一样,它要么以null出现,要么出错。我实际需要做的是创建一个查询字符串:?selectedIds=1&selectedIds=2&selectedIds=3