2012-11-10 206 views
4

我试图用AJAX发送数据到Node.js服务器,但不断碰到相同的问题,接待。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

另一方面,AJAXPOST似乎没有在控制台中触发任何错误。

所以我的问题,如果执行以下操作:

  • 我怎么能有一个简单而坚实的node.js服务器,它可以获取由一个AJAXPOST发送请求 文本?

预先感谢您!编号:127.0.0.1(localhost)。

EDIT2:这是更新的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/'); 

回答

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的请求对象还没有请求体为纯文本。它需要从dataevent的块中处理。
  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); 
+0

我不想送任何东西,就获得什么的客户端(AJAX)做派。 AJAX不是GET请求,而是POST。 –

+0

请求必须在所有情况下完成。客户端将等待请求结束。如果您不需要发回数据,只需使用res.end()完成请求。没有参数。 –

+0

检查答案更新 –