0
  • Node.js (express) 网络服务器
  • Web 服务器中的请求处理程序
app.get('/documents/ajax/:id.:format?', function(req, res) {
   console.log ('Request Received');
   var body = 'hello world';
   res.writeHead(200, {
    'Content-Length': body.length,
    'Content-Type': 'text/plain'
   });

})
  • 来自客户端javascript的ajax请求
  $.ajax({
    url : "/documents/ajax/" + item,
    success : function(msg) {
      alert ("success" + msg);
    },
    error : function(request, status, error) {
      alert("Error, returned: " + request);
      alert("Error, returned: " + status);
      alert("Error, returned: " + error);

    }
  });
  • 我能够在服务器端接收请求并发送 4 个请求

但是我的成功事件没有在客户端 JS 中被调用。此外,当我停止我的网络服务器时,我看到我的错误处理程序被调用。

请帮忙。

4

2 回答 2

1

我不得不 res.end 在服务器请求处理程序中。之后,我能够在客户端 JS 中生成成功事件

于 2013-02-11T00:10:52.110 回答
1

主要问题是您没有结束响应,因此服务器实际上从未向客户端发送任何内容。服务器应该以文件、重定向、一些文本等内容进行响应。您需要使用res.end, res.send, res.sendfile, res.redirect, res.render... 完成回调。请参阅文档

此外,您想使用 expressres.set来设置 http 标头:

app.get('/documents/ajax/:id.:format?', function(req, res) {
   console.log ('Request Received');
   var body = 'hello world';
   res.set({'Content-Type': 'text/plain'});
   res.send(body);
});

200是默认响应代码,因此您无需指定它,并且将为您计算长度。这些东西通常更容易通过以下方式从命令行调试curl

curl http://localhost:3000/documents/ajax/1

curl -I http://localhost:3000/documents/ajax/1
于 2013-02-10T22:08:52.027 回答