AJAX将数据发送到Node.js服务器

4

我想通过AJAX向Node.js服务器发送数据,但一直遇到同样的问题——接收。

以下为客户端JavaScript / AJAX代码:

    var objects = [
        function() { return new XMLHttpRequest() },
        function() { return new ActiveXObject("MSxml2.XMLHHTP") },
        function() { return new ActiveXObject("MSxml3.XMLHHTP") },
        function() { return new ActiveXObject("Microsoft.XMLHTTP") }
    ];
    function XHRobject() {
        var xhr = false;
        for(var i=0; i < objects.length; i++) {
            try {
                xhr = objects[i]();
            }
            catch(e) {
                continue;
            }
            break;
        }
        return xhr;
    }
    var xhr = XHRobject();
    xhr.open("POST", "127.0.0.1:8080", true);
    xhr.setRequestHeader("Content-Type", "text/csv");
    xhr.send(myText);
    console.log(myText);

由于某些原因,你可以在http://nodejs.org/api/http.html上获取的基本HTTP服务器会导致错误ECONNREFUSED(即使使用sudo和端口8080),因此我尝试了以下简单代码:

var http = require('http');

http.createServer(function(req, res) {
    console.log('res: ' + JSON.stringify(res.body));
}).listen(8080, null)

但它一直打印 res: undefined

另一方面,AJAX POST 似乎不会在控制台触发任何错误。

我的问题是:

  • 我如何拥有一个简单但稳定的 node.js 服务器,可以检索通过 AJAX POST 请求发送的文本?

先谢谢你!

编辑:测试是在 127.0.0.1(本地主机)上进行的。

编辑2:这是更新后的 Node.js 代码:

var http = require('http');

    var http = require('http');
    http.createServer(function (req, res) {
      res.writeHead(200, {'Content-Type': 'text/plain'});
      res.end();
      req.on('data', function(data) {
        console.log(data);
      })
    }).listen(1337, '127.0.0.1');
    console.log('Server running at http://127.0.0.1:1337/');
1个回答

3

http://nodejs.org主页上查看示例。

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
  1. Node.js请求对象没有请求正文作为纯文本。它需要从 data event 中按块处理。
  2. 您需要使用res.end结束请求,以将响应发送给客户端。

更新:

此代码应该可以正常工作:

var http = require('http');
http.createServer(function (req, res) {
  var body = '';
  req.on('data', function(chunk) {
    body += chunk.toString('utf8');
  });
  req.on('end', function() {
    console.log(body);
    res.end();    
  });
}).listen(8080);

请求必须在所有情况下完成。客户端将等待请求结束。如果您不需要发送数据回来,请使用 res.end() 完成请求,不带参数。 - Vadim Baryshev
好的,我测试了你更新后的代码,但仍然打印“undefined”。我的node.js版本是“v0.8.2”,如果有任何重要性,请知会我。 - m_vdbeek
抱歉,我的失误。Node.js请求默认没有纯文本请求体。需要通过“data”事件的块来处理它。立即检查更新。 - Vadim Baryshev
是的,看起来是这样。不过很奇怪,因为我在JavaScript控制台中没有收到任何错误信息,但我会进一步调查。 - m_vdbeek
2
在您的客户端代码中,将内容类型从 text/csv 更改为 application/x-www-form-urlencoded。在 127.0.0.1:8080 前添加 http:// - Vadim Baryshev
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接