HTML5与Node.js实现跨域AJAX数据获取
186 浏览量
更新于2024-08-29
收藏 139KB PDF 举报
本资源主要介绍了如何使用Node.js与Ajax技术在HTML5页面中实现跨域获取HTTP服务器返回的数据。示例中,HTML页面通过Ajax发送GET请求到运行在Node.js服务器上的特定端口(1337),而HTML页面本身则在80端口的网站上运行,这就涉及到了跨域问题。为解决跨域限制,Node.js服务器需在响应头中添加`Access-Control-Allow-Origin`字段,允许指定的域名进行请求。
首先,让我们详细讲解HTML5页面中的Ajax请求部分:
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>node中的ajax请求(html5页面)</title>
<script type="text/javascript">
function GetData() {
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://localhost:1337/", true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
document.getElementById("res").innerHTML = xhr.responseText;
}
}
};
xhr.send(null);
}
</script>
</head>
<body>
<input type="button" value="获取数据" onclick="GetData()" />
<div id="res">dsdf</div>
</body>
</html>
```
这段代码定义了一个`GetData`函数,当用户点击按钮时,会创建一个新的XMLHttpRequest对象,并设置其方法为GET,目标URL为`http://localhost:1337/`。`onreadystatechange`事件监听xhr对象的读取状态,当状态变为4(即完成状态)且状态码为200(表示成功)时,将服务器返回的数据填充到ID为`res`的div元素中。
接下来是Node.js服务器端的代码:
```javascript
var http = require("http");
var server = http.createServer(function(req, res) {
if (req.url !== "/favicon.ico") {
res.writeHead(200, { "Content-Type": "text/plain", "Access-Control-Allow-Origin": "http://" });
res.end("Hello, this is data from the Node.js server.");
}
});
server.listen(1337, function() {
console.log("Server running on port 1337");
});
```
这段Node.js代码使用内置的http模块创建了一个HTTP服务器。当接收到非 favicon.ico 的请求时,服务器会返回200状态码,内容类型为文本,同时在响应头中设置`Access-Control-Allow-Origin`为`http://`,这意味着任何以`http://`开头的域名都可以访问这个服务器。`res.end()`方法用于发送响应数据,这里是简单的字符串"Hello, this is data from the Node.js server."。
在实际应用中,`Access-Control-Allow-Origin`的值通常会设置为具体允许访问的域名,而不是像示例中那样设置为通配符,以确保更严格的跨域策略。例如,如果只允许`http://example.com`访问,应将其设置为`"Access-Control-Allow-Origin": "http://example.com"`。如果希望允许所有源访问,可以设置为`"*"`,但请注意这可能带来安全风险。
总结来说,本资源通过一个简单的例子展示了Node.js与Ajax结合实现跨域数据交互的过程,以及在服务器端设置跨域策略的方法。这对于开发Web应用程序,特别是前后端分离的应用场景,是非常重要的知识。
2020-12-09 上传
2018-03-17 上传
128 浏览量
2020-10-19 上传
2021-04-22 上传
2022-05-12 上传
2022-04-27 上传
2023-12-31 上传
2021-05-06 上传