2016-11-17 65 views
0

我敢新的JavaScript,我試圖發送一個物體trought POST方法內的其他對象:的Javascript:有對象發送對象trought POST方法裏面

$.post('/posttest', {tableName : 'WSTest', data : {name : "Rachid", age : 42, ville : "Tokyo"}}).done(function(data) { 
     console.log("data posted : ", data); 
    }); 

我可以取回tableNamereq.body.tableNamereq.body.data給我未定義。當我console.log(req.body)我得到:

{ tableName: 'WSTest', 
    'data[name]': 'Rachid', 
    'data[age]': '42', 
    'data[ville]': 'Tokyo' } 

據我瞭解,JavaScript的需要數據作爲迪科?我怎樣才能使數據作爲一個對象?

+0

你正確地發送它,jQuery將它轉換爲www-urlencoded與多個鍵和括號等,它是服務器不正確解析它。你使用的是什麼bodyParser – adeneo

回答

1

標準格式編碼數據是一個平面數據結構。它只是鍵/值對。

PHP引入了語法的非標準擴展,它允許您描述嵌套的數據,但解析器似乎無法識別它。

要訪問數據,您需要提到方括號。

req.body["data[name]"] 
// etc 

或者,找到一個解析器,它將方括號識別爲具有特殊含義。

假設你正在使用的(很常見)「URL編碼形式的身體分析器」的body-parser模塊的功能,請參閱the docs

擴展

擴展選項允許解析之間進行選擇使用查詢字符串庫(如果爲false)或qs庫(如果爲true)的URL編碼數據。 「擴展」語法允許將豐富的對象和數組編碼爲URL編碼格式,從而允許使用URL編碼的類似JSON的體驗。有關更多信息,請參閱qs資料庫。

所以:

app.use(bodyParser.urlencoded({ extended: true })); 

...可能會做的伎倆。

+0

通常,Express bodyParser應該處理這個如果設置爲'bodyParser.urlencoded({extended:true})' – adeneo

+0

客戶端:var str = JSON.stringify(myObjToSend);服務器端:var myObj = JSON.parse(str); – Robin