服务器js
使用body parser中间件、把手和express
路线
module.exports = function (app) {
app.post('/questionnaire/submit', function (req, res) { // Ajax Call
var data = JSON.parse(req.body);
res.send({});
});
};
客户
function submitData() { // Send a data object to the server
$.ajax({
type: 'POST',
url: '/questionnaire/submit',
dataType: "json",
data: JSON.stringify({
satisfactory: "text 1",
improvement: "text 2",
rating: 0.7
})
}).done(function () {
$(location).attr('href', '/sendOff');
}).fail(function () {
});
}
当记录req.body
我得到一个JSON字符串
{'{"满意":"文本1","改进":"文本2","评级":0.7}': '' }
我试着把这个字符串解析成一个对象。当我这样做时,我会收到这个错误消息
TypeError: Cannot convert object to primitive value
at JSON.parse (<anonymous>)
at C:\Users\mah\Desktop\FeedbackTool\Server\Routes\questionnaire.js:12:25
at Layer.handle [as handle_request] (C:\Users\mah\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\mah\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (C:\Users\mah\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (C:\Users\mah\node_modules\express\lib\router\layer.js:95:5)
at C:\Users\mah\node_modules\express\lib\router\index.js:281:22
at Function.process_params (C:\Users\mah\node_modules\express\lib\router\index.js:335:12)
at next (C:\Users\mah\node_modules\express\lib\router\index.js:275:10)
at C:\Users\mah\node_modules\body-parser\lib\read.js:130:5
那么如何将字符串解析为对象呢?
通常我会执行JSON。解析(请求正文)
。
dataType
没有说明您发送的数据类型,而是说明您期望的响应类型。您需要说明您正在通过ajax
调用中的contentType:"Application/json"
发送JSON。留档中的详细信息。(到目前为止,您不是第一个或唯一一个被dataType
的命名绊倒的人。)
这是问题的一半。另一半见斯塔莫斯的答案。
由于您使用的是body parser
中间件,因此不必解析req。body
再次导致它已经被body解析器
实例
如果你使用了应用程序。使用(bodyParser.json())
那你就得这么做
module.exports = function (app) {
app.post('/questionnaire/submit', function (req, res) { // Ajax Call
var data = req.body; // this is already parsed and is an object
res.send({});
});
};
正如@T.J.Crowder所指出的,您还应该发送正确的contentType
,以便body解析器
知道它的json
function submitData() { // Send a data object to the server
$.ajax({
type: 'POST',
url: '/questionnaire/submit',
contentType: 'application/json',
data: JSON.stringify({
satisfactory: "text 1",
improvement: "text 2",
rating: 0.7
})
}).done(function () {
$(location).attr('href', '/sendOff');
}).fail(function () {
});
}
您需要设置正确的内容类型:
$.ajax({
type: 'POST',
url: '/questionnaire/submit',
contentType: 'application/json',
data: JSON.stringify({ satisfactory: "text 1", rating: 0.7 })
});
app.post('/questionnaire/submit', function (req, res) { // Ajax Call
var data = JSON.parse(req.body);
console.log(data.rating); // 0.7
res.send(data);
});
此外,使用body parser
可以避免使用JSON。解析服务器端的调用,即链接。
我无法将给定的Json字符串转换为java对象
问题内容: 将字符串表示形式转换为对象,但我要相反。对象要转换为JSON字符串,我有一个链接http://www.devcurry.com/2010/03/convert- javascript-object-to-json.html, 但是它需要json2.js jQuery是否具有本机功能方法来做到这一点? 问题答案: jQuery只会在调用本机浏览器方法之前进行一些正则表达式检查。如果不可用
问题内容: 如何使用JavaScript(或jQuery)将描述对象的字符串转换为JSON字符串? 例如:转换这个( 不是 有效的JSON字符串): 到这个: 如果可能,我希望避免使用。 问题答案: 如果字符串是来自可靠来源 ,你可以使用然后的结果。像这样: 请注意,当您使用对象文字时,必须将其括在圆括号中,否则将花括号解析为块而不是对象。 我也同意以下问题的评论,那就是最好以有效的JSON开始编
问题内容: 您如何使JS认为字符串是JSON? 我有一个仅在将JSON对象传递给它的情况下才起作用的函数。如果我以与JSON相同的格式将字符串传递给它,则它将不起作用。因此,我想让该函数认为传递给它的字符串是JSON。该字符串确实采用JSON格式。 我还尝试了以下方法。我通过Ajax输入了字符串,参数“ handle as”为“ JSON”,然后将结果传递给函数。 所以我推断出问题不在弦上。如何将
我正在编写一个接收SQS队列对象的Lambda函数。SQS将json对象作为字符串值发送给SQS。 当我在Lambda中接收到请求时,AWS已经将其包装成一个新的JSON,由于JSON是一个字符串值,因此它将成为无效的JSON。 现在body.message不是有效的JSON。我尝试将它解析为一个原始值,比如如何使用Jackson在对象中包含原始JSON?但它总是抱怨,它在期待逗号分隔对象的地方找
问题内容: 如果我用以下方法在JS中定义了一个对象: 如何将对象转换为JSON?输出字符串应为: 问题答案: 当前所有的浏览器都内置了本机JSON支持。因此,只要您不使用IE6 / 7之类的史前浏览器,就可以像这样轻松地做到这一点: