【问题标题】:How to make a jQuery request to a locally hosted node.js server?如何向本地托管的 node.js 服务器发出 jQuery 请求?
【发布时间】:2016-08-01 20:17:17
【问题描述】:

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

关于我哪里出错了有什么想法吗?

【问题讨论】:

  • 为方便起见,请使用相对 url,只需转到 / 即可从 http://localhost:8010 开始。所以试试$.get('/', function() { alert('success'); }

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


【解决方案1】:

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

尝试使用与您的目标网址相同的网址来访问该网站。

See this similar issue with cross domain

【讨论】:

  • 你能试着改写一下吗?您是什么意思“尝试使用与您的目标相同的网址访问该网站?”什么网站?什么目标?
  • 对不起。我的意思是在浏览器导航栏中使用与 AJAX URL 目标 ($.get("http://my.local.IP.address:8010/"... ) 相同的 URL,尝试使用 localhost 或实际 IP。我错过了你指出你正在这样做的那一行。
【解决方案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);

【讨论】:

  • 但是任何人都可以提出请求并不安全
  • 同意这不安全。为了使 html 页面在本地工作,这很好。对于最佳实践@Adam0410 将需要使用快速模板或仅在快速服务器上托管 html 页面。
猜你喜欢
  • 2020-09-16
  • 2022-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多