任何人都可以告诉我为什么,当我在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控制器动作(没有斜线)时,一切正常。
某些地方事情并没有按照预期的方式进行。有什么想法吗?
谢谢!
答案 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;