我遇到了一个难题,试图了解Ajax POST到Node.JS的断开连接以及对它的express()响应之间的连接。例如:
客户:
var posting = $.post( "http://localhost:3000/put/requestList" , { first_name: "John", last_name: "Mensa", gender : "Male" })
.done(function( data ) {
$( "#schemesdisplay" ).append("Response sent!");
});
服务器:
//configure body-parser for express
app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());
//allow express to access our html (index.html) file
app.get('/ui/index.html', function(req, res) {
res.sendFile(__dirname + "/" + "index.html");
});
app.post('/put/requestList', function(req, res){
response = {
first_name : req.body.first_name,
last_name : req.body.last_name,
gender: req.body.gender
};
res.end(JSON.stringify(response + "Server Responds!"));
});
var server = app.listen(3000, function(){
var host = server.address().address;
var port = server.address().port;
console.log("Example app listening at http://%s:%s", host, port);
});
在服务器的控制台中,我可以看到客户端提交的数据。但是,没有迹象表明服务器已响应,更不用说如何将其返回到div了,我需要响应才能进入。
理想情况下,我需要将UI的JSON块发送到Node.JS服务器,然后再返回。然而,事实证明,在两个完全不同的环境中进行这种简单的通信是一个挑战。
任何(有用的)建议将不胜感激。谢谢!
答案 0 :(得分:0)
您需要替换此行
res.end(JSON.stringify(response + "Server Responds!"));
与此
res.json(response);
res.end()将结束响应过程。该方法实际上来自Node核心,特别是http.ServerResponse的response.end()方法。它用于快速结束没有任何数据的响应。
您可能还需要更改jQuery邮政编码,以包含用于发布json的标头:
$.ajax({
type: "POST",
url: "http://localhost:3000/put/requestList",
data: JSON.stringify({ first_name: "John", last_name: "Mensa", gender : "Male" }),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data){
$( "#schemesdisplay" ).append("Response sent!");
},
failure: function(errMsg) {
$( "#schemesdisplay" ).append("ERROR!");
}
});