2017-02-11 54 views
0

所以我讀了一堆關於發送和檢索JSONNodeJsExpress,但我似乎無法讓這個工作。有人說這是因爲JSON是無效的。檢索服務器(NodeJs)上的JSON,但不斷收到「意外的令牌U位置0」

var arr = { City: 'someplace', Country:Australia}; 

$.ajax({ 
    url: '/profile_upload', 
    type: 'POST', 
    data: JSON.stringify(arr), 
    contentType: 'application/json; charset=utf-8', 
    dataType: 'json', 
    async: true, 
    success: function(msg) { 
     console.log("THE THING SHOULD've WORKED! " + msg); 
    } 
}); 

服務器端代碼:

server.post('/profile_upload', function(req, res){ 
    var value = JSON.parse(req.body); 
    console.log("the data sent is: " + value.city); 

}); 

控制檯沒有登錄全市所有,只是在錯誤而崩潰。我正在使用jQuery 3.1.1。

+0

控制你的請求,並解析請求的版本,並與我們分享,這樣我們就可以確定你正在請求正確的請求 –

+0

我得到一個未定義的console.logging從服務器端「請求。身體」。我仍然不知道解決方案是什麼... – Lifeislifebutwhatiswhat

回答

1

除非Australia已被其他地方定義爲變量的可能性,否則我會假設它應該是一個字符串;因此,你應該把報價圍繞它:

var arr = { City: "someplace", Country: "Australia" }; 

單或雙,無所謂。

更新:

接下來,您不應該需要解析請求正文。我做了服務器端的快速測試與快遞,和下面的代碼工作:

router.post('/profile_upload', (req, res, next) => { 
    const value = req.body; 
    console.log("the data sent is: " + value.City); 
    res.status(200).send({ message: "Success!" }); 
}); 

服務器會自動分析輸入的字符串轉換成JS對象。我還注意到,在您的原始代碼中,City的密鑰在您的請求中發送的對象中大寫,但您沒有在您的路由中將其大寫。

供參考,這是我的客戶端代碼(即工作):

var arr = { City: "someplace", Country: "Australia" } 

$.ajax({ 
    url: '/profile_upload', 
    type: 'POST', 
    data: JSON.stringify(arr), 
    contentType: 'application/json; charset=utf-8', 
    dataType: 'json', 
    error: function (err) { 
    console.log('oh no:', err); 
    }, 
    success: function (data) { 
    console.log('message:', data.message); 
    } 
}); 

注意,因爲你已經表示dataType將是JSON,收到的將自動被解析成一個JS對象的響應。

+0

我通過將引號括起來將國家值更改爲字符串,但是我仍然收到相同的錯誤。 – Lifeislifebutwhatiswhat

+0

@Lifeislife但有些什麼我已經用工作代碼更新了我的答案。給它一個旋轉,看看它是否適合你。 –

相關問題