我在其他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就是......
答案 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请求出了问题。