server.js:
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
loggedIn = {};
app.use('/',express.static('www')); // static files
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.listen(8080, function () {
console.log('Port 8080!');
});
app.get('/user', function(req, res) {
if (typeof req.query.user != 'undefined') {
user = req.query.user;
res.status(200).send('Works');
}
});
app.post('/user', function(req, res) {
user = req.body.user;
if (typeof users[user] != 'undefined') {
return res.status(405).send('Access Forbidden');
} else {
loggedIn.push(user);
res.status(201).send('New User');
}
}
});
client.js请求:
$.ajax({
method: "GET",
url: "/user",
data: {"user" : user},
dataType: "application/json",
success: function(data) {
// success
},
error: function() {
// error case
}
});
$.ajax({
method: "POST",
url: "/user",
data: {"user" : user},
dataType: "application/json",
success: function(data) {
// success
},
error: function() {
// error case
}
});
即使GET请求完全符合预期,但POST也没有。每当我尝试通过POST请求时,即使所有参数都显示在Firebug中,它也会陷入困境。当我尝试强制ContentType到application / json时,我得到一个"意外的令牌u"错误400错误请求,意味着我发送的内容是未定义的,即使我在Firebug中有明显的参数值,当我在那里检查POST请求时,我知道我传递了一些事实,因为在Firebug中,我传递的变量具有在DOM部分中看到的值,并且在Firebug下的POST请求中弹出相同的值(参数 - 用户="这里的一些文字")。
答案 0 :(得分:1)
尝试以字符串
发送数据 $.ajax({
method: "POST",
url: "/user",
data: JSON.stringify({"user" : user}),
contentType: "application/json; charset=utf-8",
success: function(data) {
// success
},
error: function() {
// error case
}
});
希望它有效!
答案 1 :(得分:-3)
当您使用Content-Type = application / json
时
然后所有正文将解析为JSON,你不需要解析它
$