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

When posting Json using jQuery posted data is different than payload?

本文关键字:数据 有效 负载 jQuery 发布 Json      更新时间:2023-09-26

有人能告诉我为什么当我在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控制台测试我的MVC 4控制器操作时(没有斜杠),一切都很好。

有些地方的事情并没有按预期发展。有什么想法吗?

谢谢!

仔细看这部分:

TradeOffers":"[{"OfferedProductId

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

你只需要找到TradeOffers的设置位置,以及它是否有问题。有趣的是,这种问题最近似乎很常见。。。

钉住它的家伙:-)

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

经过更多的研究,我只是受这篇文章的启发修复了它,并最终创建了这个代码:

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