【发布时间】:2016-11-29 14:51:08
【问题描述】:
通过 XMLHttpRequest,我用
发送一些数据 const xhr = new XMLHttpRequest()
xhr.onreadystatechange = function (event) {
if (xhr.readyState === 4 /** responseText is not available yet */) {
const statusCode = xhr.status
const responseText = xhr.responseText
// some callback functions
}
}
xhr.open('POST', url, true /** async */)
xhr.setRequestHeader('Content-Type', 'text/plain')
xhr.withCredentials = true
xhr.timeout = timeoutMillis
xhr.ontimeout = function (event) {
// some time out error log
}
xhr.send(JSON.stringify(payloads))
和服务器端node.js服务器代码是
var httpPort = 3001
var http = require('http')
,qs = require('querystring');
http.createServer(function (req, res) {
console.log(req.url + " " + req.method);
if( req.url == '/mytoken' && req.method == 'POST'){
console.log('start');
var body = [];
res.writeHead(200, {'Content-Type':'text/plain'});
req.on('data', function(chunk){
body.push(chunk);
console.log('GOT DATA: ' + body);
});
res.end('OK');
}else{
res.writeHead(404, {'Content-Type': 'text/plain'});
res.end('404 ERROR');
}
}).listen(httpPort);
我写了这样的服务器代码。但是,服务器没有发送任何响应。
它应该是 statusCode 200 和 responseText 'OK'。
我错过了一些?还是做错了?
编辑 1:编辑服务器代码并读取发送给我的数据
【问题讨论】:
-
第一行的结果是什么
console.log(req.url + req.method); -
console.log()只通知控制台/终端。使用res.write()将信息发送到HTTP 客户端。另外,请注意时间——事件不会立即发生,因此您可能会在req实际提供任何'data'之前结束res。同时收听'end'event。 -
@reza /mytoken POST
-
@JonathanLonowski 我写的像 res.writeHead(200, {'Content-Type':'textplain'}); res.end('OK');不是说xhr可以让xhr.statusCode为200,xhr.responseText为'OK'吗?
-
@pebC 是的。一旦 XHR 的
readyState === 4(即请求“完成”),它的statusCode和responseText应该是200和'OK'。这不是你看到的结果吗?如果不是,结果如何?您如何验证它们?
标签: javascript node.js xmlhttprequest