我试图通过熟悉node.js来扩展我的视野(我的职业是.NET开发人员),但我在我认为简单的POST示例上遇到了麻烦。我确实有使用 jQuery 的经验,因此在我正在构建的这个示例网站中,node.js 对我来说是相对未知的。
node.JS 服务器代码:
var express = require('express');
var app = express();
app.configure(function() {
app.use(express.bodyParser());
app.use(app.router);
app.use(express.logger());
});
app.use(express.static(__dirname + '/public/PRB_Presentation'));
app.post('/GetPage', function(request, response){
console.log(request.body.pageNumber);
response.send(request.body.pageNumber);
});
var port = 80;
app.listen(port);
console.log('Listening on port: ' + port);
我的客户端 jQuery 逻辑:
function getPage(pageNumber){
$.ajax({
url: '/GetPage',
type: 'POST',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
data: JSON.stringify({ pageNumber: pageNumber })
}).done(function(data, textStatus, jqXHR) {
console.log("Success: " + data);
}).fail(function(jqXHR, textStatus, errorThrown) {
console.log("Error: " + errorThrown);
}).always(function() {
console.log("Done!");
})
;
};
当我的node.js服务器运行时,我确实看到我发送的页码正确地输出到控制台窗口,但这就是我在客户端得到的:
Error: unknown
Done!
我认为我在这里做了一些非常简单的错误,但我不太明白。
编辑
- request.body.pageNumber 包含单个数字(例如, 2)
- fail() 中的 textStatus 只是“错误”
最佳答案
您收到错误的原因是您在 res.send()
中提供了一个数字。这样做会将值作为 HTTP 状态代码而不是响应正文发送。
res.send(200); -> HTTP 200 OK
res.send('200'); -> 200
send()
方法接受两个参数。如果您提供一个数值,那么它将被解释为要发送的 HTTP 状态代码。您可能会发现更适合您尝试执行的操作的是 res.json()
。
app.post('/path', function(req, res) {
res.json(request.body.page);
});
否则,强制将数字作为字符串发送:
app.post('/path', function(req, res) {
res.send('' + request.body.page);
});
关于javascript - jQuery POST 到 Node.JS 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19803421/