节点JS可以提示HTML页面更改吗?
Can Node JS prompt an HTML page to change?
我对Node JS相当陌生,但一直在尝试使用它的一些AJAX,并尝试读取和写入文件。我现在想知道的是 Node JS 服务器是否可以告诉 HTML 页面进行更改,或者是否必须从页面发出一些请求才能从服务器接收有关如何更改的信息。
(希望)澄清:假设我有一个带有 id ajax-retrieve
的按钮,单击该按钮时会从我的 Node JS 服务器询问一些信息:
$('#ajax-retrieve').click(function () {
$.ajax({
url: 'http://localhost:8124/',
data: 'fn=open',
dataType: "jsonp",
cache: false,
timeout: 5000,
success: function(data) {
console.log(data);
$("#input-ready").html(data.save.text);
},
error: function(jqXHR, textStatus, errorThrown) {
alert('error ' + textStatus + " " + errorThrown);
}
});
});
成功从服务器接收回的一些数据后,回调(如您所见)将数据记录在控制台中,并将其部分放入 id input-ready
的元素中。但是,如果请求失败或超时,则会出现一个警告框,提供错误的详细信息。
这大致是服务器端代码的样子:
http.createServer(function (req, res) {
"use strict";
var queryObj = url.parse(req.url, true).query;
queryObj.fn = queryObj.fn || '';
queryObj.callback = queryObj.callback || '';
if (queryObj.callback) {
if (queryObj.fn === 'open') {
fs.readFile('jsonp-storage-2.txt', function (err, data) {
if (err) {
throw err;
} else {
queryObj.save = data;
res.writeHead(200, {'Content-Type': 'application/javascript'});
res.write(queryObj.callback + '({ fn: "' + queryObj.fn + '", save: ' + queryObj.save + ' })');
res.end();
}
});
} else {
console.log('Function (fn property) not recognised.');
}
}
}).listen(8124);
但是,如果服务器在将数据传递到我的HTML页面之前需要对数据执行更复杂的操作,并且如果我服务器的代码可能需要一些时间来执行该操作,该怎么办?有没有办法让它将返回的数据分块并在准备就绪时返回相关部分,或者需要从我的 HTML 页面单独请求?
理想情况下,我不希望我的HTML页面必须继续向服务器请求它已经请求的信息,以查看它是否已经准备好。我想要的是某种回调,以便在服务器完成时 HTML 页面接收所需的数据并相应地更改显示?这可能是一个基本问题,但我所描述的可能吗?
您似乎在描述长轮询,这是一种长时间保持打开状态的技术,其中 http 连接长时间保持打开状态,数据在可用时以块的形式发送回。更一般地说,我认为您对服务器推送非常感兴趣 - 服务器在没有客户端明确请求的情况下发回数据,长轮询近似于此。我最喜欢的 node.js 解决方案是 socket.io,这是一个库,它围绕服务器推送提供了一个干净的包装器,并根据客户端浏览器中可用的内容自动使用许多技术(包括长轮询)。
既然你想双向查看 socket.io 和 SockJS。
- 旋转按钮[HTML][JS]
- 在ajax中发送html+JS
- 使用服务器上的HTML/js在网页上显示图像
- 为什么我从浏览器修改html/js时会多次发送ajax请求
- HTML/JS github页面项目没有't在使用firefox运行时加载图像或声音
- 当按下箭头键时,我的图像以一种奇怪的方式跳跃(HTML+JS)
- Html+js+css的打包程序
- 使用Sails.JS为静态HTML/JS应用程序提供身份验证
- HTML/JS表单已提交两次
- Heroku类型的简单HTML/JS应用程序托管
- HTML JS在DIV中附加随机图像
- 如何将从GWT编译的JS添加/访问到另一个外部HTML / JS项目中
- 如何从我的机器提供HTML + JS + CSS网络应用程序,以便其他人可以查看它
- HTML + JS:设置文本区域内容样式的最佳方式
- 如何在html / JS中展开或关闭内容 - 始终分配给不同的id
- HTML/JS 如何输入文本并使其显示在屏幕上
- 从导入的 HTML/JS 文件中提取变量
- 我们怎么知道消除HTML/JS/CSS文件中的空白可以缩短页面加载时间呢
- "捆绑;仅适用于HTML/JS的解决方案
- 是否覆盖网站上文本输入区域的默认移动设备键盘?(HTML/JS/jQuery)