2013-10-29 143 views
0

在嵌套對象上使用JSON.stringify()的正確方法是什麼?我收到來自API調用一個壞的請求預計JSON字符串:JSON.stringify() - 嵌套對象

testData = {"credentials": {"user": "[email protected]", "password": "testpassword", "country": "us"}}; 

當我查看postDasta:

"{"credentials": {"user": "[email protected]", "password": "testpassword", "country": "us"}}"; 

$.ajax({ 
    ... 
    data: JSON.stringify(testData), 
    ... 
}); 

感謝,

Ĵ

+0

您是否嘗試過將對象傳遞給數據而不進行字符串化?我不記得數據參數期望一個字符串。據我所知,它要麼是一個對象,要麼是一個字符串來代替get請求。 – Daedalus

回答

1

如果這是jQuery(它看起來是這樣),data參數接受一個對象並執行必要的序列化以將其作爲關聯數組傳遞給服務器。如果在通過它之前,你不會串起來。

+0

如果我放棄contentType:'application/json'我得到:'415 Unsupported Media Type - 30ms - 752B)'。當我使用休息客戶端時,請求可以很好地使用'{「credentials」:{「user」:「[email protected]」,「password」:「testpassword」,「country」:「us」}}'。 – neridaj

+0

@neridaj如果您不回覆我的回答,您如何能期待我回復? – Daedalus

1

jQuery的.ajax()方法的數據參數不會將json字符串作爲值。它需要一個查詢形成的字符串(test=value&otherstuff=othervalue)或一個對象,如上面鏈接的文檔中所述。

+0

我刪除了JSON.stringify()並驗證了我通過$ .isPlainObject(testData):true發送了一個對象。當我查看postData時,它看起來像一個url編碼查詢字符串:「credentials%5Buser%5D = test%40email.com&credentials%5Bpassword%5D = testpassword&credentials%5B&credentials%5Bcountry%5D = us」,但contentType設置爲'application/json '和類型設置爲'發佈'。 – neridaj

+0

var testData = {「credentials」:{「user」:「[email protected]」,「password」:「testpassword」,「country」:「us」}}; $阿賈克斯({ \t \t \t \t網址: '/憑據', \t \t \t \t類型: '後', \t \t \t \t的contentType: '應用/ JSON', 成功:功能(數據,textStatus, jqXHR){ \t \t \t \t警報( '成功');} , \t \t \t \t數據:TESTDATA, \t \t \t \t錯誤:功能(jqXHR,textStatus,errorThrown){ \t \t \t \t警報( '錯誤'); \t \t \t \t \t \t} });' – neridaj

+0

你不應該設置內容類型爲application/JSON。我真的沒有理由使用它,除非你專門發送json。如文檔中所述,它將任何json對象轉換爲查詢字符串,以便它可以被服務器轉換爲post請求(這是自動完成的),例如..不修改內容類型,它可以通過'$ _POST'。 – Daedalus