在POST上将javascript对象作为JSON读取

时间:2011-09-13 19:35:16

标签: javascript ajax json asp.net-mvc-3

我在其他SO帖子中读到“javascript is JSON”。我很难将这个理论翻译成我的应用程序。我用jQuery执行POST

    $.ajax({
        type: 'POST',
        url: 'Pricing/Create',
        data: items,
        success: function () { alert('successfully called pricing'); },
        dataType: 'json'
    });

该帖子已成功点击PricingController的{​​{1}}方法中的断点。在审核我的Create时,它是空的。

Request.QueryString是一个items数组SomeItem。定义为

length = 30

我没有执行JSON转换,因为“javascript是JSON”。如何在定价控制器中获取我的数据?

<小时/> 差不多了。当function SomeItem(description, finalPrice, percentDiscount) { this.Description = description; this.FinalPrice = finalPrice; this.PercentDiscount = percentDiscount; } 运行时,我在alert()中看到一组很好的垃圾(在Firebug中也很漂亮):

JSON.stringify(items)

但是,当它到达服务器时...在C#[{"Description":"some item","Data2":"$1.00","data3":"10"},//...中它看起来像:

Request.Form wtflip就是......

3 个答案:

答案 0 :(得分:5)

JSON是'JavaScript Object Notation',而不是JavaScript。您使用JSON来表示JavaScript对象,尤其是当您要将其发送回服务器时。

在将JavaScript对象传递给ajax调用之前,您需要将其转换为JSON - 这应该可以解决问题:

var json = $.toJSON(items);

请仔细阅读,这可能会有所帮助:http://haacked.com/archive/2010/04/15/sending-json-to-an-asp-net-mvc-action-method-argument.aspx

答案 1 :(得分:3)

您是否尝试过JSON.stringify()

您可以将数据行更改为:

data: JSON.stringify(items),

如果目标浏览器本身不支持JSON.stringify(),您可以通过Google为库填写该功能。

答案 2 :(得分:1)

好吧,如果您使用POST方法,那么它不会出现在QueryString变量中。如果您使用类似提琴手的工具观察正在发生的事情,您的数据(项目)是否会在请求正文中传回?如果是这样,那么您应该能够访问它。否则,你的AJAX请求出了问题。