我有一个简单的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
如果我在我的浏览器(谷歌浏览器)中使用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上的函数,它将成功返回。
关于我哪里出错的任何想法?
答案 0 :(得分:2)
这是一个跨域问题。浏览器认为您的网页不属于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);
答案 1 :(得分:0)
我想这可能是一个跨域问题,因为您在通话中使用了您的IP地址,并且在浏览器网址上使用localhost:8010来访问您的网站。这是ajax请求常见的问题,与Node.js
无关尝试使用相同的网址访问网站,而不是您要定位的网址。