如何向本地托管的 node.js 服务器发出 jQuery 请求?

How to make a jQuery request to a locally hosted node.js server?

我有一个简单的 node.js 服务器保存在一个名为 server.js 的文件中,其代码如下:

var http = require('http');

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
}).listen(8010);

我通过执行 运行 在命令行本地(安装了 node.js)

node server.js

如果我随后在我的浏览器 (google chrome) 中使用 URL my.local.IP.address:8010 访问它,它会成功显示 hello world。

我也在创建一个网页,该网页将在页面加载后立即执行 jQuery:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script>    
    $(document).ready(function(){
        $.get("http://my.local.IP.address:8010/", function(){
            alert("Success");
        }).fail(function(err){
            alert("Failed");
            alert(JSON.stringify(err));
        });
    });
</script>

当我在浏览器中打开这个 html 文件时,它总是会创建一个警告框,提示失败,然后是这个字符串化的 JSON 对象作为错误(我已经格式化它以便更容易阅读):

{
"readyState": 0,
"status" : 0,
"statusText": "error"
}

当 node.js 服务器在本地 运行 时,无论我尝试了多少次,都会发生这种情况。我也试过自己做一个异步的 XMLHTTP 请求函数,但这也不起作用。

我知道 jQuery 和我制作的 XMLHTTP 函数都能正常工作,因为如果我调用 URL https://httpbin.org/get 上的函数,它将 return 成功。

关于我哪里出错的任何想法?

我猜这可能是一个跨域问题,因为您在通话中使用了您的 IP 地址,并且 localhost:8010 在浏览器 url 上访问您的站点。这是ajax请求的常见问题,与Node.js

无关

尝试使用与您定位的网站相同的 url 访问该网站。

See this similar issue with cross domain

这是一个跨域问题。浏览器认为您的页面不是 http://localhost:8081 服务器的一部分。您需要如下更改服务器代码才能使其正常工作。

http.createServer(function (req, res) {
    res.setHeader("Access-Control-Allow-Origin", "*");
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
}).listen(8010);