我正在尝试使用 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
(本地主机)上完成。
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/');
最佳答案
查看 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/');
- Node.js 请求对象没有请求正文作为纯文本。它需要由
data
event 中的 block 处理. - 您需要使用 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);
关于javascript - AJAX 发送数据到 Node.js 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13318694/