使用jQuery发布Json时发布的数据与有效负载不同?

时间:2013-07-18 13:51:55

标签: javascript jquery ajax asp.net-mvc

任何人都可以告诉我为什么,当我在Jquery中构建一个字符串时,在Chrome Javascript调试器中它显示为:

{"ClaimType":"Trade","ClaimedProductId":4,"ClaimingUserId":3,"Message":"","TradeOffers":"[{"OfferedProductId":"3","OfferedQuantity":"2"},{"OfferedProductId":"3","OfferedQuantity":"5234"}]"}

但是当我使用$ .ajax发布它然后检查Chrome调试器中的POST请求的有效负载时,它看起来像:

{"ClaimType":"Trade","ClaimedProductId":4,"ClaimingUserId":3,"Message":"","TradeOffers":"[{\"OfferedProductId\":\"3\",\"OfferedQuantity\":\"2\"},{\"OfferedProductId\":\"3\",\"OfferedQuantity\":\"5234\"}]"}

那些反斜杠不是在那里,是对的吗?当我用Rest Console测试我的MVC 4控制器动作(没有斜线)时,一切正常。

某些地方事情并没有按照预期的方式进行。有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

仔细看看这部分:

TradeOffers":"[{"OfferedProductId

冒号后面的引号告诉我,TradeOffers的值实际上是一个字符串,恰好包含一个JSON数组。 Chrome只是确保它会以字符串形式出现在另一边,并带有任何引号。

您只需要找到TradeOffers设置的位置,以及是否存在问题。有趣的是,这类问题最近似乎很常见......

答案 1 :(得分:0)

Nailed it guys: - )

感谢您让我走上正确的轨道,指出我传递的是字符串而不是数组。

经过一些研究后,我刚刚修改了this post,并最终创建了这段代码:

    var productOffers = $("div.tradeOffer").map(function () {
    var productOffer = { OfferedProductId: $(this).find(".selectTraderOffer:selected").val(), OfferedQuantity: $(this).find(".tradeProductQuantity").val() };
    return productOffer;
}).get();
return productOffers;