我有一个静态 HTML 页面,hello.html。如果我双击 hello.html,它会在我的默认浏览器中打开,并正确显示 HTML,但在浏览器的搜索栏中,显示的不是带有主机名的 URL,而是我的 hello.html 的本地文件路径计算机。
我使用 express (node.js) 在我的计算机上制作了一个简单的 express web 服务器。它设置为监听 8080 端口,并有一个简单的 GET api。(API 现在做一些简单的事情,比如调用 'ls')。我希望能够从我的静态 hello.html 调用该 GET API。在我的静态 HTML 页面中,我使用 jquery 对此 api 进行 ajax 调用,将其称为http://127.0.0.1:8080/myapi。一旦我启动快速服务器并加载页面,查看控制台日志,当我在浏览器中加载静态 HTML 页面时,对 myapi 的请求正在通过(ls 响应正在记录在控制台上),但是,jquery HTML 页面中的 ajax 始终执行错误函数,即使我将响应设置为 200。
我正在阅读很多关于为什么会发生这种情况的信息,并且阅读它可能是由于 CORS 问题。但是,在这种情况下,我无法在服务器端指定主机名,因为实际上并没有运行 Web 服务器,因此没有与我的静态 HTML 页面关联的实际主机名。
这甚至可能吗?(要在您的计算机上拥有一个没有运行 Web 服务器的静态 HTML 页面,使用 API 创建您自己的快速服务器,然后从静态网页调用这些 API?)
例子:
你好.html
<html>
<head>
<title>Hello World</title>
</head>
<body>
<script src"js/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$.ajax({
type: "GET",
url: "http://127.0.0.1:8080/myapi",
contentType: 'application/json',
success: function(response) {
alert("success!");
},
error: function(jqXHR, textStatus, errorThrown) {
alert("error");
},
});
});
</script>
<p>Hello World!</p>
</body>
</html>
myserver.js:
var express = require('express');
var shelljs = require('shelljs');
var app = express();
app.get('/myapi', function (req, res) {
shellStr = shelljs.exec('ls');
if ( shellStr ) {
console.log("successful call on server side");
res.status(200);
res.json({ ls: shellStr });
}
else {
console.log("failure status on server side");
res.status(500).json({ error: "Could not do ls"});
}
})
var server = app.listen(8080, function() {
console.log("Listening on 8080");
})
我通过提供“node myserver.js”来启动服务器,然后在浏览器中打开静态 HTML 页面。当它加载时,正在进行 API 调用,因为我看到了服务器端控制台输出,并且它正在成功。但是,回到静态 html 中,总是执行 ajax 调用的“错误”函数。