0

谁能告诉我为什么,当我在 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 控制器操作时,一切正常。

某处事情并没有按照他们应该的方式进行。有任何想法吗?

谢谢!

4

2 回答 2

1

仔细看这部分:

TradeOffers":"[{"OfferedProductId

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

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

于 2013-07-18T13:57:05.877 回答
0

搞定了伙计们:-)

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

经过一些更多的研究,我只是在这篇文章的启发下修复了它,最后创建了这段代码:

    var productOffers = $("div.tradeOffer").map(function () {
    var productOffer = { OfferedProductId: $(this).find(".selectTraderOffer:selected").val(), OfferedQuantity: $(this).find(".tradeProductQuantity").val() };
    return productOffer;
}).get();
return productOffers;
于 2013-07-19T09:22:06.047 回答