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

时间:2016-04-11 15:11:39

标签: javascript jquery node.js httprequest http-get

我有一个简单的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上的函数,它将成功返回。

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

2 个答案:

答案 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

无关

尝试使用相同的网址访问网站,而不是您要定位的网址。

See this similar issue with cross domain