【发布时间】:2019-04-29 20:41:58
【问题描述】:
我正在尝试从使用 JavaScript 中的 XMLHttpRequest 对象创建的 Node 应用程序中获取响应。我用来执行此操作的代码如下:
var get = function()
{
var http = new XMLHttpRequest({mozSystem: true});
http.onreadystatechange = function() {
if (http.status === 200) {
console.log(http.responseText);
}
}
http.open("GET", "http://127.0.0.1:3000", true);
http.setRequestHeader("Content-Type", "text/plain");
http.send();
}
Node 应用是:
const http = require('http');
const fs = require('fs');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) =>
{
let body = [];
req.on('data', (chunk) =>
{
body.push(chunk);
}).on('end', () =>
{
body = Buffer.concat(body).toString();
if(req.method === "GET")
{
console.log("GET");
}
res.setHeader('Content-Type', 'text/plain');
res.end("Hello World");
})
});
但是,没有打印任何内容。我在 Chrome 和 Mozilla 中打开开发者工具,可以看到状态为 200,并且响应列在 Ajax 调用的响应下方 - 清楚地显示“Hello World”。
我在本地做这一切,作为学校的节点演示。我的应用程序能够很好地处理发布请求 - 但从 GET 请求中获取响应似乎不起作用。我愿意接受任何建议!
先谢谢你了。
【问题讨论】:
-
如果
http://127.0.0.1:3000是与页面本身不同的服务器,那么您最好在端口 3000 上运行的任何服务器中启用 CORS -
或者
http.status === 200之前的http.readyState === 4... 使用onload而不是老式的onreadystatechange- 因为当 readyState === 2 时,会收到标头,可能包括响应状态。 .. 但是响应的主体尚未到来-大约有无数使用onreadystatechange的示例-我很惊讶您弄错了-developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/… -
@JaromandaX,启用 CORS 工作 - 我没有意识到它会这么简单。此外,我确实尝试了 onload,以及使用 onreadystatechange 的各种实现——所有这些都不起作用。谢谢你的建议。
标签: javascript node.js http get