我使用快递和请求POST看起来像那样
router.post('/', function(req, res, next){
var data = req.body;
getRandom(data, function(value){
res.json({value: value});
});
});
POST通过ajax发送,然后使用新数据更新textarea。
$.ajax({
type: "POST",
url: "/",
data: JSON.stringify(datareq),
dataType: 'json',
contentType: 'application/json',
success: function(x){
$.each(x, function(index, value) {
$('.textarea').append(value + '\n');
});
},
error: function(x) {
console.log(x + 'error');
}
});
如何使用一个POST和一些响应发送它。当cb完成时,用户在textarea中收到一个数据,然后在另一个数据中收到一个数据,直到最后。
<textarea>
data 1 - 1sec
data 2 - 2sec leater
data 3 - 3 second later
...
</textarea>
我添加时间(1秒......)只是为了表明回调有很多事要做,以发送另一个回复。
当然这不起作用,因为res.send()关闭连接而我收到错误
那么如何实现我的想法,在发布请求后同时发送。我想非常快地提供用户数据,然后在准备好不等待所有数据然后发送响应时再提供另一个数据。
答案 0 :(得分:2)
你不能
<强>原因:强>
Http在发送响应后关闭连接。您无法保持打开状态并向客户端发送多个响应。 HTTP不支持它。
解决方案1:
只需在客户端放置一个计时器并定期请求。
解决方案2(推荐):
使用套接字,并通过它传递数据。 socket.io是nodejs
个应用程序的套接字库。这是非常容易使用。建立连接,不断从服务器发送数据并在客户端接收数据。