2013-07-18 47 views
0

任何一個可以告訴我爲什麼,當我構建Jquery的字符串,在Chrome的JavaScript調試器它表明這樣的:當張貼JSON使用jQuery發佈的數據不同於有效載荷?

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

但是,當我將它張貼使用$阿賈克斯,然後檢查POST請求的有效載荷Chrome調試器,它看起來像:

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

這些反斜槓沒有supposted在那裏,是正確的?當我測試我的MVC 4控制器動作與休息控制檯(沒有斜槓)一切正常。

某個地方的事情並沒有按照他們應有的方式進行。有任何想法嗎?

謝謝!

+0

爲什麼你的'「'之前的'['後']' – nnnnnn

+0

因?你正在構造你的json的方式,是的,反斜槓應該在那裏,你有什麼是json裏面的json。 –

回答

0

釘它傢伙:-)

謝謝你把我在正確的軌道上指出的事實,我經過一個字符串,而不是一個陣列。

一些更多的研究,我只是固定它通過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; 
1

仔細查看這一部分:

TradeOffers":"[{"OfferedProductId 

這引號結腸告訴我只是在這之後TradeOffers的價值實際上是一個字符串,它恰好包含一個JSON陣列。 Chrome只是確保它會以字符串的形式出現在對方身上,並帶有任何引號。

您只需要找到TradeOffers的設置位置,以及是否有問題。夠好笑的是,這類問題似乎是最近常見...

+0

是的,Katana314是正確的。TradeOffers的值是一個對象數組還是字符串表示形式這樣的東西? – deitch

+0

感謝你們的輸入!是的,TradeOffers的值是一個對象數組,它並不是一個字符串表示形式!:-)。我對JSON相當陌生並且好奇它需要解決這個問題嗎?刪除'[{「OfferedProductId'之前的引號?FYI - 我發佈到一個MVC 4控制器操作,該操作會執行一個視圖模型,對接收到的請求進行反序列化[請查看上一個問題。](http:/ /stackoverflow.com/questions/17701669/posting-json-to-mvc-4-webapi-controller-action-why-doesnt-it-deserialize-my-ar) – Corstiaan

+0

@MetaVerse好吧,如果你是手寫JSON ,解決方法很簡單,刪除上面提到的引號和最後一個引號,然後刪除其中的其他引號的斜槓,但我猜它是由Javascript或其他程序生成的,在這種情況下,你需要找到它將TradeOffers數組轉換成JSON的位置;在某些時候,它似乎太早做了一個不必要的'JSON.stringify'。 – Katana314

相關問題